You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2018/12/19 20:24:24 UTC

[01/52] [abbrv] ignite git commit: IGNITE-10239 Update navigation and top menu. - Fixes #5630.

Repository: ignite
Updated Branches:
  refs/heads/ignite-627 f9c06b853 -> 404a9f3ba


http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/header-logo.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/header-logo.pug b/modules/web-console/frontend/app/modules/branding/header-logo.pug
deleted file mode 100644
index f0453d3..0000000
--- a/modules/web-console/frontend/app/modules/branding/header-logo.pug
+++ /dev/null
@@ -1,18 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a(ui-sref='signin')
-    img.navbar-brand(ng-src='{{logo.url}}')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/header-title.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/header-title.directive.js b/modules/web-console/frontend/app/modules/branding/header-title.directive.js
deleted file mode 100644
index f67439c..0000000
--- a/modules/web-console/frontend/app/modules/branding/header-title.directive.js
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = `
-    <h1
-        style="margin: 0;font-size: 1.4em;"
-    >{{::title.text}}</h1>
-`;
-
-/**
- * @param {import('./branding.service').default} branding
- */
-export default function factory(branding) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.text = branding.headerText;
-    }
-
-    return {
-        restrict: 'E',
-        template,
-        controller,
-        controllerAs: 'title',
-        replace: true
-    };
-}
-
-factory.$inject = ['IgniteBranding'];
-

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js b/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
deleted file mode 100644
index 3f8b3de..0000000
--- a/modules/web-console/frontend/app/modules/branding/powered-by-apache.directive.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './powered-by-apache.pug';
-
-/**
- * @param {import('./branding.service').default} branding
- */
-export default function factory(branding) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.show = branding.showIgniteLogo;
-    }
-
-    return {
-        restrict: 'E',
-        template,
-        controller,
-        controllerAs: 'poweredBy'
-    };
-}
-
-factory.$inject = ['IgniteBranding'];
-

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug b/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug
deleted file mode 100644
index 6031235..0000000
--- a/modules/web-console/frontend/app/modules/branding/powered-by-apache.pug
+++ /dev/null
@@ -1,18 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a(ng-if='poweredBy.show' href='//ignite.apache.org' target='_blank')
-    img(ng-src='/images/pb-ignite.png')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/demo/Demo.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/demo/Demo.module.js b/modules/web-console/frontend/app/modules/demo/Demo.module.js
index 6c14e4a..9416bca 100644
--- a/modules/web-console/frontend/app/modules/demo/Demo.module.js
+++ b/modules/web-console/frontend/app/modules/demo/Demo.module.js
@@ -71,34 +71,7 @@ function demoInterceptor(Demo) {
 
 demoInterceptor.$inject = ['Demo'];
 
-/**
- * @param {ng.IScope} $scope
- * @param {import('@uirouter/angularjs').StateService} $state
- * @param {ng.IWindowService} $window
- * @param {ReturnType<typeof import('app/services/Confirm.service').default>} Confirm
- */
-function demoController($scope, $state, $window, Confirm) {
-    const _openTab = (stateName) => $window.open($state.href(stateName), '_blank');
-
-    $scope.startDemo = () => {
-        if (!$scope.user.demoCreated)
-            return _openTab('demo.reset');
-
-        Confirm.confirm('Would you like to continue with previous demo session?', true, false)
-            .then((resume) => {
-                if (resume)
-                    return _openTab('demo.resume');
-
-                _openTab('demo.reset');
-            });
-    };
-
-    $scope.closeDemo = () => {
-        $window.close();
-    };
-}
 
-demoController.$inject = ['$scope', '$state', '$window', 'IgniteConfirm'];
 
 function igniteDemoInfoProvider() {
     const items = DEMO_INFO;
@@ -211,6 +184,5 @@ angular
 .config(config)
 .provider('Demo', DemoProvider)
 .factory('demoInterceptor', demoInterceptor)
-.controller('demoController', demoController)
 .provider('igniteDemoInfo', igniteDemoInfoProvider)
 .service('DemoInfo', DemoInfo);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js b/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
deleted file mode 100644
index 9b905d7..0000000
--- a/modules/web-console/frontend/app/modules/navbar/Navbar.provider.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default function() {
-    const items = [];
-
-    this.push = function(data) {
-        items.push(data);
-    };
-
-    this.$get = function() {
-        return items;
-    };
-
-    return this;
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/navbar.directive.js b/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
deleted file mode 100644
index e400cf7..0000000
--- a/modules/web-console/frontend/app/modules/navbar/navbar.directive.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default function factory(IgniteNavbar) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.items = IgniteNavbar;
-    }
-
-    return {
-        restrict: 'A',
-        controller,
-        controllerAs: 'navbar'
-    };
-}
-
-factory.$inject = ['IgniteNavbar'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/navbar.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/navbar.module.js b/modules/web-console/frontend/app/modules/navbar/navbar.module.js
index 63588c7..e2a4f83 100644
--- a/modules/web-console/frontend/app/modules/navbar/navbar.module.js
+++ b/modules/web-console/frontend/app/modules/navbar/navbar.module.js
@@ -17,17 +17,10 @@
 
 import angular from 'angular';
 
-import IgniteNavbar from './Navbar.provider';
 import IgniteUserbar from './Userbar.provider';
 
-import igniteNavbar from './navbar.directive';
-import igniteUserbar from './userbar.directive';
-
 angular
 .module('ignite-console.navbar', [
 
 ])
-.provider('IgniteNavbar', IgniteNavbar)
-.provider('IgniteUserbar', IgniteUserbar)
-.directive('igniteNavbar', igniteNavbar)
-.directive('igniteUserbar', igniteUserbar);
+.provider('IgniteUserbar', IgniteUserbar);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/navbar/userbar.directive.js b/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
deleted file mode 100644
index b636a34..0000000
--- a/modules/web-console/frontend/app/modules/navbar/userbar.directive.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @param {ng.IRootScopeService} $root
- * @param {unknown} IgniteUserbar
- * @param {unknown} AclService
- */
-function controller($root, IgniteUserbar, AclService) {
-    const ctrl = this;
-
-    this.$onInit = () => {
-        ctrl.items = [
-            {text: 'Profile', sref: 'base.settings.profile'},
-            {text: 'Getting started', click: 'gettingStarted.tryShow(true)'}
-        ];
-
-        const _rebuildSettings = () => {
-            ctrl.items.splice(2);
-
-            if (AclService.can('admin_page'))
-                ctrl.items.push({text: 'Admin panel', sref: 'base.settings.admin'});
-
-            ctrl.items.push(...IgniteUserbar);
-
-            if (AclService.can('logout'))
-                ctrl.items.push({text: 'Log out', sref: 'logout'});
-        };
-
-        if ($root.user)
-            _rebuildSettings(null, $root.user);
-
-        $root.$on('user', _rebuildSettings);
-    };
-}
-
-controller.$inject = ['$rootScope', 'IgniteUserbar', 'AclService'];
-
-export default function() {
-    return {
-        restrict: 'A',
-        controller,
-        controllerAs: 'userbar'
-    };
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/services/store.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/store.ts b/modules/web-console/frontend/app/services/store.ts
new file mode 100644
index 0000000..19dde69
--- /dev/null
+++ b/modules/web-console/frontend/app/services/store.ts
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {BehaviorSubject} from 'rxjs/BehaviorSubject';
+import {Subject} from 'rxjs/Subject';
+import {scan, tap} from 'rxjs/operators';
+import {merge} from 'rxjs/observable/merge';
+
+interface Reducer<State, Actions> {
+    (state: State, action: Actions): State
+}
+
+export class Store<Actions, State> {
+    static $inject = ['$injector'];
+
+    actions$: Subject<Actions>
+    state$: BehaviorSubject<State>
+    private _reducers: Array<Reducer<State, Actions>>
+
+    constructor(private $injector: ng.auto.IInjectorService) {
+        this.$injector = $injector;
+
+        this.actions$ = new Subject();
+        this.state$ = new BehaviorSubject({});
+        this.actions$.pipe(
+            scan((state, action) => this._reducers.reduce((state, reducer) => reducer(state, action), state), void 0),
+            tap((state) => this.state$.next(state))
+        ).subscribe();
+        this._reducers = [(state) => state];
+    }
+
+    dispatch(action: Actions) {
+        this.actions$.next(action);
+    }
+
+    addReducer<T extends keyof State, U = State[T]>(path: T, reducer: Reducer<U, Actions>): void
+    addReducer(reducer: Reducer<State, Actions>): void
+    addReducer(...args) {
+        if (typeof args[0] === 'string') {
+            const [path, reducer] = args;
+            this._reducers = [
+                ...this._reducers,
+                (state = {}, action) => {
+                    const pathState = reducer(state[path], action);
+                    // Don't update root state if child state changes
+                    return state[path] !== pathState ? {...state, [path]: pathState} : state;
+                }
+            ];
+        } else {
+            const [reducer] = args;
+            this._reducers = [...this._reducers, reducer];
+        }
+    }
+
+    addEffects(EffectsClass) {
+        const instance = this.$injector.instantiate(EffectsClass);
+        return merge(
+            ...Object.keys(instance).filter((k) => k.endsWith('Effect$')).map((k) => instance[k]),
+        ).pipe(tap((a) => this.dispatch(a))).subscribe();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/actions/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/actions/ui.ts b/modules/web-console/frontend/app/store/actions/ui.ts
new file mode 100644
index 0000000..25d9ba0
--- /dev/null
+++ b/modules/web-console/frontend/app/store/actions/ui.ts
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {NavigationMenuItem} from '../../types';
+
+export const TOGGLE_SIDEBAR: 'TOGGLE_SIDEBAR' = 'TOGGLE_SIDEBAR';
+export const toggleSidebar = () => ({type: TOGGLE_SIDEBAR});
+
+export const NAVIGATION_MENU_ITEM: 'NAVIGATION_MENU_ITEM' = 'NAVIGATION_MENU_ITEM';
+export const navigationMenuItem = (menuItem: NavigationMenuItem) => ({type: NAVIGATION_MENU_ITEM, menuItem});
+
+export const HIDE_NAVIGATION_MENU_ITEM: 'HIDE_NAVIGATION_MENU_ITEM' = 'HIDE_NAVIGATION_MENU_ITEM';
+export const hideNavigationMenuItem = (label: NavigationMenuItem['label']) => ({type: HIDE_NAVIGATION_MENU_ITEM, label});
+
+export const SHOW_NAVIGATION_MENU_ITEM: 'SHOW_NAVIGATION_MENU_ITEM' = 'SHOW_NAVIGATION_MENU_ITEM';
+export const showNavigationMenuItem = (label: NavigationMenuItem['label']) => ({type: SHOW_NAVIGATION_MENU_ITEM, label});
+
+export type UIActions =
+    | ReturnType<typeof toggleSidebar>
+    | ReturnType<typeof navigationMenuItem>
+    | ReturnType<typeof hideNavigationMenuItem>
+    | ReturnType<typeof showNavigationMenuItem>;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/actions/user.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/actions/user.ts b/modules/web-console/frontend/app/store/actions/user.ts
new file mode 100644
index 0000000..34c8d20
--- /dev/null
+++ b/modules/web-console/frontend/app/store/actions/user.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {User} from '../../types';
+
+export const USER: 'USER' = 'USER';
+export const user = (user: User) => ({type: USER, user});
+
+export type UserActions =
+    | ReturnType<typeof user>;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/effects/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/effects/ui.ts b/modules/web-console/frontend/app/store/effects/ui.ts
new file mode 100644
index 0000000..2a635d6
--- /dev/null
+++ b/modules/web-console/frontend/app/store/effects/ui.ts
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {AppStore, USER, ofType, hideNavigationMenuItem, showNavigationMenuItem} from '..';
+import {map} from 'rxjs/operators';
+
+export class UIEffects {
+    static $inject = ['Store']
+    constructor(private store: AppStore) {}
+
+    toggleQueriesNavItemEffect$ = this.store.actions$.pipe(
+        ofType(USER),
+        map((action) => {
+            const QUERY_LABEL = 'Queries';
+            return action.user.becomeUsed ? hideNavigationMenuItem(QUERY_LABEL) : showNavigationMenuItem(QUERY_LABEL);
+        })
+    )
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/index.ts b/modules/web-console/frontend/app/store/index.ts
new file mode 100644
index 0000000..fa4a878
--- /dev/null
+++ b/modules/web-console/frontend/app/store/index.ts
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {Store} from '../services/store';
+
+import {UIState, uiReducer} from './reducers/ui';
+import {UIActions} from './actions/ui';
+import {UIEffects} from './effects/ui';
+
+import {UserActions} from './actions/user';
+
+export * from './actions/ui';
+export * from './reducers/ui';
+export * from './selectors/ui';
+
+export * from './actions/user';
+
+export {ofType} from './ofType';
+
+export type State = {
+    ui: UIState,
+};
+
+export type Actions =
+    | UserActions
+    | UIActions;
+
+export type AppStore = Store<Actions, State>;
+
+register.$inject = ['Store'];
+export function register(store: AppStore) {
+    store.addReducer('ui', uiReducer);
+    store.addEffects(UIEffects);
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/ofType.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/ofType.ts b/modules/web-console/frontend/app/store/ofType.ts
new file mode 100644
index 0000000..3d3bd8e
--- /dev/null
+++ b/modules/web-console/frontend/app/store/ofType.ts
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {OperatorFunction} from 'rxjs/interfaces';
+import {filter} from 'rxjs/operators';
+
+type Action = {type: string};
+export function ofType<T extends string, U extends Action, V extends Extract<U, {type: T}>>(type: T): OperatorFunction<U, V>
+export function ofType<U extends Action>(type): OperatorFunction<U, U> {
+    return filter((action: U): boolean => type === action.type);
+}
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/reducers/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/reducers/ui.ts b/modules/web-console/frontend/app/store/reducers/ui.ts
new file mode 100644
index 0000000..6f2859d
--- /dev/null
+++ b/modules/web-console/frontend/app/store/reducers/ui.ts
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {NavigationMenu} from '../../types';
+import {UIActions, TOGGLE_SIDEBAR, NAVIGATION_MENU_ITEM, HIDE_NAVIGATION_MENU_ITEM, SHOW_NAVIGATION_MENU_ITEM} from '..';
+
+export type UIState = {
+    sidebarOpened: boolean,
+    navigationMenu: NavigationMenu
+};
+
+const defaults: UIState = {
+    sidebarOpened: false,
+    navigationMenu: []
+};
+
+export function uiReducer(state: UIState = defaults, action: UIActions): UIState {
+    switch (action.type) {
+        case TOGGLE_SIDEBAR:
+            return {...state, sidebarOpened: !state.sidebarOpened};
+        case NAVIGATION_MENU_ITEM:
+            return {...state, navigationMenu: [...state.navigationMenu, action.menuItem]};
+        case HIDE_NAVIGATION_MENU_ITEM:
+            return {
+                ...state,
+                navigationMenu: state.navigationMenu.map((i) => i.label === action.label ? {...i, hidden: true} : i)
+            };
+        case SHOW_NAVIGATION_MENU_ITEM:
+            return {
+                ...state,
+                navigationMenu: state.navigationMenu.map((i) => i.label === action.label ? {...i, hidden: false} : i)
+            };
+        default:
+            return state;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/reduxDebug.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/reduxDebug.ts b/modules/web-console/frontend/app/store/reduxDebug.ts
new file mode 100644
index 0000000..d7b1474
--- /dev/null
+++ b/modules/web-console/frontend/app/store/reduxDebug.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {reducer, devTools} from '../components/page-configure/reduxDevtoolsIntegration';
+import {AppStore} from '.';
+import {filter, withLatestFrom, tap} from 'rxjs/operators';
+
+run.$inject = ['Store'];
+
+export function run(store: AppStore) {
+    if (devTools) {
+        devTools.subscribe((e) => {
+            if (e.type === 'DISPATCH' && e.state) store.dispatch(e);
+        });
+
+        const ignoredActions = new Set([
+        ]);
+
+        store.actions$.pipe(
+            filter((e) => e.type !== 'DISPATCH'),
+            withLatestFrom(store.state$.skip(1)),
+            tap(([action, state]) => {
+                if (ignoredActions.has(action.type)) return;
+                devTools.send(action, state);
+                console.log(action);
+            })
+        ).subscribe();
+
+        store.addReducer(reducer);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/store/selectors/ui.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/selectors/ui.ts b/modules/web-console/frontend/app/store/selectors/ui.ts
new file mode 100644
index 0000000..0bd2fa9
--- /dev/null
+++ b/modules/web-console/frontend/app/store/selectors/ui.ts
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {State, AppStore} from '..';
+import {pluck, map} from 'rxjs/operators';
+import {pipe} from 'rxjs';
+import {memoize, orderBy} from 'lodash';
+
+const orderMenu = <T extends {order: number}>(menu: Array<T>) => orderBy(menu, 'order');
+
+export const selectSidebarOpened = () => pluck<State, State['ui']['sidebarOpened']>('ui', 'sidebarOpened');
+export const selectNavigationMenu = () => pipe(
+    pluck<State, State['ui']['navigationMenu']>('ui', 'navigationMenu'),
+    map(orderMenu)
+);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/types/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/types/index.ts b/modules/web-console/frontend/app/types/index.ts
index df6a169..ad40c15 100644
--- a/modules/web-console/frontend/app/types/index.ts
+++ b/modules/web-console/frontend/app/types/index.ts
@@ -32,3 +32,33 @@ export interface IIgniteNg1StateDeclaration extends Ng1StateDeclaration {
     tfMetaTags: ITfMetatagsConfig,
     permission?: string
 }
+
+export type User = {
+    _id: string,
+    firstName: string,
+    lastName: string,
+    email: string,
+    phone?: string,
+    company: string,
+    country: string,
+    registered: string,
+    lastLogin: string,
+    lastActivity: string,
+    admin: boolean,
+    token: string,
+    resetPasswordToken: string,
+    // Assigned in UI
+    becomeUsed?: boolean
+};
+
+export type NavigationMenuItem = {
+    label: string,
+    icon: string,
+    order: number,
+    hidden?: boolean
+} & (
+    {sref: string, activeSref: string} |
+    {href: string}
+);
+
+export type NavigationMenu = Array<NavigationMenuItem>;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/cluster.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/cluster.icon.svg b/modules/web-console/frontend/public/images/icons/cluster.icon.svg
new file mode 100644
index 0000000..7576049
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/cluster.icon.svg
@@ -0,0 +1,10 @@
+<svg version="1.1" viewBox="0 0 20 17" xmlns="http://www.w3.org/2000/svg">
+	<g fill="none" fill-rule="evenodd" stroke="currentColor" stroke-width="2">
+		<rect x="8.5" y="1" width="3" height="3" rx="1"/>
+		<rect x="8.5" y="12.25" width="3" height="3" rx="1"/>
+		<rect x="16" y="12.25" width="3" height="3" rx="1"/>
+		<rect x="1" y="12.25" width="3" height="3" rx="1"/>
+		<path d="M10 5v2.5l7.656.05v4.206" stroke-linecap="square" stroke-linejoin="round"/>
+		<path d="M10.156 5v6.756V7.5L2.5 7.55v4.206" stroke-linecap="round" stroke-linejoin="round"/>
+	</g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg b/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg
deleted file mode 100644
index f405317..0000000
--- a/modules/web-console/frontend/public/images/icons/connectedClusters.icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 13"><g fill="none" fill-rule="evenodd"><path fill="currentColor" d="M6 0h4v4H6zm0 9h4v4H6zm6 0h4v4h-4zM0 9h4v4H0z"/><path stroke="currentColor" stroke-linecap="square" d="M8 4v2l6.125.04v3.365"/><path stroke="currentColor" stroke-linecap="square" d="M8.125 4v5.405V6L2 6.04v3.365"/></g></svg>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg b/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg
new file mode 100644
index 0000000..afb51ee
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/downloadAgent.icon.svg
@@ -0,0 +1,16 @@
+<svg version="1.1" viewBox="0 0 20 18" xmlns="http://www.w3.org/2000/svg">
+	<g fill="none" fill-rule="evenodd">
+		<g transform="translate(-263 -1597)" fill="currentColor">
+			<g transform="translate(235 1485)">
+				<g transform="translate(28 112)">
+					<path d="m-8.7041e-14 9.0435v7.1788c0 0.97787 0.81811 1.7778 1.8182 1.7778h16.364c0.99966 0 1.8178-0.79991 1.8178-1.7778v-7.1788h-20zm1.7103 0h16.472v7.1876h-16.364l-0.10794-7.1876z"/>
+					<g stroke="currentColor" stroke-width=".5">
+						<polygon points="14.7 8.635 14.131 8.0659 10.757 11.44 10.757 5 9.9435 5 9.9435 11.44 6.5692 8.0659 6 8.635 10.35 12.985"/>
+						<polygon points="10.757 3.719 10.757 3 9.9435 3 9.9435 3.719"/>
+						<polygon points="10.757 1.719 10.757 1 9.9435 1 9.9435 1.719"/>
+					</g>
+				</g>
+			</g>
+		</g>
+	</g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/index.js b/modules/web-console/frontend/public/images/icons/index.js
index 0951d32..2e41085 100644
--- a/modules/web-console/frontend/public/images/icons/index.js
+++ b/modules/web-console/frontend/public/images/icons/index.js
@@ -21,7 +21,6 @@ export {default as check} from './check.icon.svg';
 export {default as checkmark} from './checkmark.icon.svg';
 export {default as clock} from './clock.icon.svg';
 export {default as collapse} from './collapse.icon.svg';
-export {default as connectedClusters} from './connectedClusters.icon.svg';
 export {default as copy} from './copy.icon.svg';
 export {default as cross} from './cross.icon.svg';
 export {default as csv} from './csv.icon.svg';
@@ -43,3 +42,7 @@ export {default as refresh} from './refresh.icon.svg';
 export {default as search} from './search.icon.svg';
 export {default as sort} from './sort.icon.svg';
 export {default as structure} from './structure.icon.svg';
+export {default as cluster} from './cluster.icon.svg';
+export {default as sql} from './sql.icon.svg';
+export {default as menu} from './menu.icon.svg';
+export {default as downloadAgent} from './downloadAgent.icon.svg';

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/menu.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/menu.icon.svg b/modules/web-console/frontend/public/images/icons/menu.icon.svg
new file mode 100644
index 0000000..392d42e
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/menu.icon.svg
@@ -0,0 +1,7 @@
+<svg width="16" height="16" version="1.1" viewBox="0 0 4.2333332 4.2333332" xmlns="http://www.w3.org/2000/svg">
+	<g transform="translate(0 -292.77)" fill="currentColor">
+		<rect y="295.95" width="4.2333" height=".52917" style="paint-order:markers fill stroke"/>
+		<rect x="1.1126e-7" y="294.62" width="4.2333" height=".52917" style="paint-order:markers fill stroke"/>
+		<rect y="293.3" width="4.2333" height=".52917" style="paint-order:markers fill stroke"/>
+	</g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/images/icons/sql.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/images/icons/sql.icon.svg b/modules/web-console/frontend/public/images/icons/sql.icon.svg
new file mode 100644
index 0000000..bd54eee
--- /dev/null
+++ b/modules/web-console/frontend/public/images/icons/sql.icon.svg
@@ -0,0 +1,3 @@
+<svg version="1.1" viewBox="0 0 20 16" xmlns="http://www.w3.org/2000/svg">
+	<path d="M6.454 9.208c0-.2-.07-.353-.211-.46-.141-.107-.395-.22-.762-.338a5.4 5.4 0 0 1-.871-.351c-.583-.315-.875-.74-.875-1.273 0-.278.079-.525.235-.743a1.53 1.53 0 0 1 .673-.51c.293-.121.622-.183.986-.183.367 0 .694.067.98.2.287.133.51.32.669.562.158.242.238.517.238.825H6.458c0-.235-.074-.417-.222-.548-.148-.13-.357-.196-.625-.196-.258 0-.46.055-.603.164a.517.517 0 0 0-.215.432c0 .167.084.307.252.42.169.113.416.219.743.317.602.181 1.04.406 1.315.674.275.268.413.602.413 1.001 0 .445-.168.793-.505 1.046-.336.253-.788.38-1.357.38-.395 0-.755-.073-1.08-.218a1.708 1.708 0 0 1-.742-.594 1.522 1.522 0 0 1-.255-.875h1.061c0 .567.339.85 1.016.85.251 0 .448-.05.589-.153a.5.5 0 0 0 .211-.429zm5.988-1.103c0 .48-.077.896-.233 1.25-.155.354-.37.637-.645.851l.854.67-.674.596-1.093-.878a2.314 2.314 0 0 1-.388.032c-.426 0-.805-.102-1.14-.307a2.038 2.038 0 0 1-.775-.876c-.183-.38-.276-.816-.279-1.31v-.254c0-.506.091-.95.274-1.335.182-.384.44-.68.772-.885a2.124 2.124 0 0 1 1.14-.309c.429 0 .809.103
  1.142.309.332.206.59.5.772.885.182.385.273.828.273 1.331v.23zm-1.072-.233c0-.538-.096-.948-.289-1.227-.193-.28-.468-.42-.825-.42-.355 0-.63.138-.822.414-.193.277-.29.682-.293 1.215v.25c0 .525.097.932.29 1.22.192.29.47.435.832.435.355 0 .628-.14.818-.418.19-.279.287-.685.29-1.219v-.25zm2.906 1.834h2.246v.85h-3.304V5.42h1.058v4.285zM18.182 0H1.818C.818 0 0 .8 0 1.778v12.444C0 15.2.818 16 1.818 16h16.364c1 0 1.818-.8 1.818-1.778V1.778C20 .8 19.182 0 18.182 0zM1.818 1.769h16.364V14.23H1.818V1.77z" fill="currentColor" fill-rule="evenodd"/>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/public/stylesheets/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/public/stylesheets/style.scss b/modules/web-console/frontend/public/stylesheets/style.scss
index ce14e45..3f601be 100644
--- a/modules/web-console/frontend/public/stylesheets/style.scss
+++ b/modules/web-console/frontend/public/stylesheets/style.scss
@@ -255,17 +255,70 @@ body {
     flex-direction: column;
 }
 
-body > .wrapper,
-    // Nested ui-view, like on password reset state
-body > .wrapper > ui-view {
-    display: flex;
-    flex-direction: column;
+:root {
+    --page-side-padding: 30px;
+}
+
+.wrapper {
+    --header-height: 62px;
+
     min-height: 100vh;
+    display: grid;
+    grid-template-columns: auto 1fr;
+    grid-template-rows: auto var(--header-height) 1fr;
+    grid-template-areas: 'notifications notifications' 'header header' 'sidebar content';
+
+    permanent-notifications {
+        grid-area: notifications;
+    }
+
+    web-console-header {
+        grid-area: header;
+        position: -webkit-sticky;
+        position: sticky;
+        top: 0;
+        z-index: 10;
+        transform: translateZ(1px);
+    }
+
+    web-console-sidebar {
+        grid-area: sidebar;
+        transform: translateZ(1px);
+    }
+
+    &>.content {
+        grid-area: content;
+        padding-left: var(--page-side-padding);
+        padding-right: var(--page-side-padding);
+        padding-bottom: var(--page-side-padding);
+        display: flex;
+        flex-direction: column;
+
+        &>ui-view {
+            display: flex;
+            flex-direction: column;
+            flex: 1;
+        }
+    }
+
+    &.wrapper-public {
+        grid-template-columns: 1fr;
+        grid-template-rows: auto var(--header-height) 1fr auto;
+        grid-template-areas: 'notifications' 'header' 'content' 'footer';
+    }
+}
+
+.public-page {
+    margin-left: auto;
+    margin-right: auto;
     flex: 1 0 auto;
+    width: 100%;
+    max-width: 530px;
 
-    .body-container {
-        flex: 1 0 auto;
-        padding-bottom: 30px;
+    .public-page__title {
+        font-size: 38px;
+        font-weight: 300;
+        margin: 30px 0 30px;
     }
 }
 
@@ -374,7 +427,6 @@ i.btn {
 h1,
 h2,
 h3 {
-    user-select: none;
     font-weight: normal;
     /* Makes the vertical size of the text the same for all fonts. */
     line-height: 1;
@@ -2004,10 +2056,6 @@ html, body {
     position: absolute !important;
 }
 
-.demo-mode {
-    padding-top: 30px;
-}
-
 // Fix for injecting svg icon into BS btn
 .btn--with-icon {
     display: flex;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/base.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/base.pug b/modules/web-console/frontend/views/base.pug
index 967d469..b14cdac 100644
--- a/modules/web-console/frontend/views/base.pug
+++ b/modules/web-console/frontend/views/base.pug
@@ -14,13 +14,10 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
+permanent-notifications
 web-console-header
-    web-console-header-left
-        include ./includes/header-left
-    web-console-header-right
-        include ./includes/header-right
+    web-console-header-content
 
-.container--responsive.body-container.flex-full-height
-    div(ui-view='').flex-full-height
+web-console-sidebar
 
-web-console-footer
+ui-view.content
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/includes/header-left.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/header-left.pug b/modules/web-console/frontend/views/includes/header-left.pug
deleted file mode 100644
index 03e0616..0000000
--- a/modules/web-console/frontend/views/includes/header-left.pug
+++ /dev/null
@@ -1,42 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a.wch-nav-item(
-    ui-sref='base.configuration.overview'
-    ui-sref-active='{active: "base.configuration"}'
-)
-    | Configure
-
-.wch-nav-item(ng-if='!$root.user.becomeUsed')
-    a(ui-sref='base.sql.tabs.notebooks-list' ui-sref-active='active')
-        | Queries
-
-.wch-additional-nav-items(ignite-navbar)
-    .wch-nav-item(ng-repeat='item in navbar.items')
-        div(ng-if='$root.user.becomeUsed ? item.canBecomed : item.children' ng-click='$event.stopPropagation()'
-                ng-class='{active: $state.includes(item.sref)}'
-                bs-dropdown='item.children'
-                data-placement='bottom-left'
-                data-trigger='hover focus'
-                data-container='self'
-                aria-haspopup='true'
-                aria-expanded='false'
-            )
-                span {{::item.text}}
-                    span.caret
-
-        a(ng-if='$root.user.becomeUsed ? item.canBecomed : !item.children' ui-sref='{{item.sref}}' ui-sref-active='active')
-            | {{::item.text}}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/includes/header-right.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/includes/header-right.pug b/modules/web-console/frontend/views/includes/header-right.pug
deleted file mode 100644
index d2d89aa..0000000
--- a/modules/web-console/frontend/views/includes/header-right.pug
+++ /dev/null
@@ -1,35 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-.wch-demo-toggle(ng-if='!$root.user.becomeUsed' ng-controller='demoController')
-    button.btn-ignite.btn-ignite--success(
-        ng-if='!IgniteDemoMode'
-        ng-click='startDemo()'
-    ) Start Demo
-
-web-console-header-extension
-
-.wch-nav-item(ignite-userbar)
-    .user-name-wrapper(
-        ng-class='{active: $state.includes("base.settings")}'
-        ng-click='$event.stopPropagation()'
-        bs-dropdown='userbar.items'
-        data-placement='bottom-right'
-        data-trigger='hover focus'
-        data-container='self'
-    )
-        span {{$root.user.firstName}} {{$root.user.lastName}}
-        span.caret

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/views/public.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/views/public.pug b/modules/web-console/frontend/views/public.pug
new file mode 100644
index 0000000..934ac56
--- /dev/null
+++ b/modules/web-console/frontend/views/public.pug
@@ -0,0 +1,20 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+web-console-header(hide-menu-button='true')
+    .web-console-header-content__title Management console for Apache Ignite
+.content(ui-view='page')
+web-console-footer.web-console-footer__page-bottom
\ No newline at end of file


[47/52] [abbrv] ignite git commit: IGNITE-9893 IGNITE-1757 IGNITE-10723 Adding hibernate-5.3 module

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
new file mode 100644
index 0000000..5f54ad0
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
@@ -0,0 +1,441 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.util.Map;
+import javax.persistence.Cacheable;
+import javax.persistence.Id;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCompute;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.lang.IgniteRunnable;
+import org.apache.ignite.resources.IgniteInstanceResource;
+import org.apache.ignite.resources.LoggerResource;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.boot.MetadataSources;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest.CONNECTION_URL;
+import static org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest.hibernateProperties;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cache.spi.access.AccessType.NONSTRICT_READ_WRITE;
+
+/**
+ *
+ */
+@RunWith(JUnit4.class)
+public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        if (!getTestIgniteInstanceName(0).equals(igniteInstanceName))
+            cfg.setClientMode(true);
+
+        cfg.setCacheConfiguration(
+            cacheConfiguration(DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME),
+            cacheConfiguration(Entity1.class.getName()),
+            cacheConfiguration(Entity2.class.getName()),
+            cacheConfiguration(Entity3.class.getName())
+        );
+
+        cfg.setMarshaller(new BinaryMarshaller());
+
+        cfg.setPeerClassLoadingEnabled(false);
+
+        return cfg;
+    }
+
+    private CacheConfiguration cacheConfiguration(String cacheName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+        cfg.setName(cacheName);
+        cfg.setCacheMode(PARTITIONED);
+        cfg.setAtomicityMode(ATOMIC);
+        cfg.setWriteSynchronizationMode(FULL_SYNC);
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected boolean isMultiJvm() {
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        super.beforeTestsStarted();
+
+        startGrid(0);
+
+        startGrid(1);
+        startGrid(2);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids();
+
+        super.afterTestsStopped();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testL2Cache() throws Exception {
+        Ignite srv = ignite(0);
+
+        {
+            IgniteCompute client1Compute =
+                srv.compute(srv.cluster().forNodeId(ignite(1).cluster().localNode().id()));
+
+            client1Compute.run(new HibernateInsertRunnable());
+        }
+
+        {
+            IgniteCompute client2Compute =
+                srv.compute(srv.cluster().forNodeId(ignite(2).cluster().localNode().id()));
+
+            client2Compute.run(new HibernateLoadRunnable());
+        }
+
+        {
+            IgniteCompute srvCompute = srv.compute(srv.cluster().forLocal());
+
+            srvCompute.run(new HibernateLoadRunnable());
+        }
+    }
+
+    /**
+     *
+     */
+    private static class HibernateInsertRunnable extends HibernateBaseRunnable {
+        /** {@inheritDoc} */
+        @Override public void run() {
+            SessionFactory sesFactory = startHibernate(ignite.name());
+
+            Session ses = sesFactory.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 1; i++) {
+                    {
+                        Entity1 e = new Entity1();
+                        e.setId(i);
+                        e.setName("name-" + i);
+
+                        ses.save(e);
+                    }
+
+                    {
+                        Entity2 e = new Entity2();
+                        e.setId(String.valueOf(i));
+                        e.setName("name-" + i);
+
+                        ses.save(e);
+                    }
+
+                    {
+                        Entity3 e = new Entity3();
+                        e.setId(i);
+                        e.setName("name-" + i);
+
+                        ses.save(e);
+                    }
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+        }
+    }
+
+    /**
+     *
+     */
+    private static class HibernateLoadRunnable extends HibernateBaseRunnable {
+        /** {@inheritDoc} */
+        @Override public void run() {
+            SessionFactory sesFactory = startHibernate(ignite.name());
+
+            Session ses = sesFactory.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 1; i++) {
+                    {
+                        Entity1 e = (Entity1)ses.load(Entity1.class, i);
+
+                        log.info("Found: " + e.getName());
+                    }
+                    {
+                        Entity2 e = (Entity2)ses.load(Entity2.class, String.valueOf(i));
+
+                        log.info("Found: " + e.getName());
+                    }
+                    {
+                        Entity3 e = (Entity3)ses.load(Entity3.class, (double)i);
+
+                        log.info("Found: " + e.getName());
+                    }
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+        }
+    }
+
+    /**
+     *
+     */
+    private abstract static class HibernateBaseRunnable implements IgniteRunnable {
+        /** */
+        @IgniteInstanceResource
+        protected Ignite ignite;
+
+        /** */
+        @LoggerResource
+        IgniteLogger log;
+
+        /**
+         * @param nodeName Name of the grid providing caches.
+         * @return Session factory.
+         */
+        SessionFactory startHibernate(String nodeName) {
+            log.info("Start hibernate on node: " + nodeName);
+
+            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
+
+            for (Map.Entry<String, String> e : hibernateProperties(nodeName, NONSTRICT_READ_WRITE.name()).entrySet())
+                builder.applySetting(e.getKey(), e.getValue());
+
+            builder.applySetting("hibernate.connection.url", CONNECTION_URL);
+
+            MetadataSources metadataSources = new MetadataSources(builder.build());
+
+            metadataSources.addAnnotatedClass(Entity1.class);
+            metadataSources.addAnnotatedClass(Entity2.class);
+            metadataSources.addAnnotatedClass(Entity3.class);
+
+            return metadataSources.buildMetadata().buildSessionFactory();
+        }
+    }
+
+    /**
+     * Test Hibernate entity1.
+     */
+    @javax.persistence.Entity
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity1 {
+        /** */
+        @Id
+        private int id;
+
+        /** */
+        private String name;
+
+        /**
+         * @return ID.
+         */
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            Entity1 entity1 = (Entity1)o;
+
+            return id == entity1.id;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return id;
+        }
+    }
+
+    /**
+     * Test Hibernate entity1.
+     */
+    @javax.persistence.Entity
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity2 {
+        /** */
+        @Id
+        private String id;
+
+        /** */
+        private String name;
+
+        /**
+         * @return ID.
+         */
+        public String getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(String id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            Entity2 entity2 = (Entity2)o;
+
+            return id.equals(entity2.id);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            return id.hashCode();
+        }
+    }
+
+    /**
+     * Test Hibernate entity1.
+     */
+    @javax.persistence.Entity
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity3 {
+        /** */
+        @Id
+        private double id;
+
+        /** */
+        private String name;
+
+        /**
+         * @return ID.
+         */
+        public double getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(double id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean equals(Object o) {
+            if (this == o)
+                return true;
+
+            if (o == null || getClass() != o.getClass())
+                return false;
+
+            Entity3 entity3 = (Entity3)o;
+
+            return Double.compare(entity3.id, id) == 0;
+        }
+
+        /** {@inheritDoc} */
+        @Override public int hashCode() {
+            long temp = Double.doubleToLongBits(id);
+            return (int)(temp ^ (temp >>> 32));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheSelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheSelfTest.java
new file mode 100644
index 0000000..ea43ea7
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheSelfTest.java
@@ -0,0 +1,1991 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.OptimisticLockException;
+import javax.persistence.PersistenceException;
+import javax.persistence.SharedCacheMode;
+import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.hibernate.ObjectNotFoundException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.annotations.NaturalId;
+import org.hibernate.annotations.NaturalIdCache;
+import org.hibernate.boot.Metadata;
+import org.hibernate.boot.MetadataSources;
+import org.hibernate.boot.registry.StandardServiceRegistry;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.exception.ConstraintViolationException;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.RootClass;
+import org.hibernate.query.Query;
+import org.hibernate.stat.CacheRegionStatistics;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
+import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_ACCESS_TYPE_PROPERTY;
+import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.IGNITE_INSTANCE_NAME_PROPERTY;
+import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.REGION_CACHE_PROPERTY;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cfg.AvailableSettings.JPA_SHARED_CACHE_MODE;
+import static org.hibernate.cfg.Environment.CACHE_REGION_FACTORY;
+import static org.hibernate.cfg.Environment.GENERATE_STATISTICS;
+import static org.hibernate.cfg.Environment.HBM2DDL_AUTO;
+import static org.hibernate.cfg.Environment.RELEASE_CONNECTIONS;
+import static org.hibernate.cfg.Environment.USE_QUERY_CACHE;
+import static org.hibernate.cfg.Environment.USE_SECOND_LEVEL_CACHE;
+
+/**
+ *
+ * Tests Hibernate L2 cache.
+ */
+@RunWith(JUnit4.class)
+public class HibernateL2CacheSelfTest extends GridCommonAbstractTest {
+    /** */
+    private static final TcpDiscoveryIpFinder IP_FINDER = new TcpDiscoveryVmIpFinder(true);
+
+    /** */
+    public static final String CONNECTION_URL = "jdbc:h2:mem:example;DB_CLOSE_DELAY=-1";
+
+    /** */
+    public static final String ENTITY_NAME = Entity.class.getName();
+
+    /** */
+    public static final String ENTITY2_NAME = Entity2.class.getName();
+
+    /** */
+    public static final String VERSIONED_ENTITY_NAME = VersionedEntity.class.getName();
+
+    /** */
+    public static final String CHILD_ENTITY_NAME = ChildEntity.class.getName();
+
+    /** */
+    public static final String PARENT_ENTITY_NAME = ParentEntity.class.getName();
+
+    /** */
+    public static final String CHILD_COLLECTION_REGION = ENTITY_NAME + ".children";
+
+    /** */
+    public static final String NATURAL_ID_REGION =
+        "org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest$Entity##NaturalId";
+
+    /** */
+    public static final String NATURAL_ID_REGION2 =
+        "org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest$Entity2##NaturalId";
+
+    /** */
+    private SessionFactory sesFactory1;
+
+    /** */
+    private SessionFactory sesFactory2;
+
+    /**
+     * First Hibernate test entity.
+     */
+    @javax.persistence.Entity
+    @NaturalIdCache
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    public static class Entity {
+        /** */
+        private int id;
+
+        /** */
+        private String name;
+
+        /** */
+        private Collection<ChildEntity> children;
+
+        /**
+         * Default constructor required by Hibernate.
+         */
+        public Entity() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param name Name.
+         */
+        public Entity(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        @NaturalId(mutable = true)
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        /**
+         * @return Children.
+         */
+        @OneToMany(cascade=javax.persistence.CascadeType.ALL, fetch=FetchType.LAZY)
+        @JoinColumn(name="ENTITY_ID")
+        public Collection<ChildEntity> getChildren() {
+            return children;
+        }
+
+        /**
+         * @param children Children.
+         */
+        public void setChildren(Collection<ChildEntity> children) {
+            this.children = children;
+        }
+    }
+
+    /**
+     * Second Hibernate test entity.
+     */
+    @javax.persistence.Entity
+    @NaturalIdCache
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    public static class Entity2 {
+        /** */
+        private int id;
+
+        /** */
+        private String name;
+
+        /** */
+        private Collection<ChildEntity> children;
+
+        /**
+         * Default constructor required by Hibernate.
+         */
+        public Entity2() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param name Name.
+         */
+        public Entity2(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        @NaturalId(mutable = true)
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    /**
+     * Hibernate child entity referenced by {@link Entity}.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings("PublicInnerClass")
+    public static class ChildEntity {
+        /** */
+        private int id;
+
+        /**
+         * Default constructor required by Hibernate.
+         */
+        public ChildEntity() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         */
+        public ChildEntity(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        @GeneratedValue
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+    }
+
+    /**
+     * Hibernate entity referencing {@link Entity}.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings("PublicInnerClass")
+    public static class ParentEntity {
+        /** */
+        private int id;
+
+        /** */
+        private Entity entity;
+
+        /**
+         * Default constructor required by Hibernate.
+         */
+        public ParentEntity() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param entity Referenced entity.
+         */
+        public ParentEntity(int id, Entity entity) {
+            this.id = id;
+            this.entity = entity;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Referenced entity.
+         */
+        @OneToOne
+        public Entity getEntity() {
+            return entity;
+        }
+
+        /**
+         * @param entity Referenced entity.
+         */
+        public void setEntity(Entity entity) {
+            this.entity = entity;
+        }
+    }
+
+    /**
+     * Hibernate entity.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    public static class VersionedEntity {
+        /** */
+        private int id;
+
+        /** */
+        private long ver;
+
+        /**
+         * Default constructor required by Hibernate.
+         */
+        public VersionedEntity() {
+        }
+
+        /**
+         * @param id ID.
+         */
+        public VersionedEntity(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Version.
+         */
+        @javax.persistence.Version
+        public long getVersion() {
+            return ver;
+        }
+
+        /**
+         * @param ver Version.
+         */
+        public void setVersion(long ver) {
+            this.ver = ver;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
+
+        discoSpi.setIpFinder(IP_FINDER);
+
+        cfg.setDiscoverySpi(discoSpi);
+
+        cfg.setCacheConfiguration(generalRegionConfiguration(DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME),
+            generalRegionConfiguration(DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME),
+            transactionalRegionConfiguration(ENTITY_NAME),
+            transactionalRegionConfiguration(ENTITY2_NAME),
+            transactionalRegionConfiguration(VERSIONED_ENTITY_NAME),
+            transactionalRegionConfiguration(PARENT_ENTITY_NAME),
+            transactionalRegionConfiguration(CHILD_ENTITY_NAME),
+            transactionalRegionConfiguration(CHILD_COLLECTION_REGION),
+            transactionalRegionConfiguration(NATURAL_ID_REGION),
+            transactionalRegionConfiguration(NATURAL_ID_REGION2));
+
+        return cfg;
+    }
+
+    /**
+     * @param regionName Region name.
+     * @return Cache configuration for {@link IgniteGeneralDataRegion}.
+     */
+    private CacheConfiguration generalRegionConfiguration(String regionName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+
+        cfg.setName(regionName);
+
+        cfg.setCacheMode(PARTITIONED);
+
+        cfg.setAtomicityMode(ATOMIC);
+
+        cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+        cfg.setBackups(1);
+
+        cfg.setStatisticsEnabled(true);
+
+        //cfg.setAffinity(new RendezvousAffinityFunction(false, 10));
+
+        return cfg;
+    }
+
+    /**
+     * @param regionName Region name.
+     * @return Transactional Cache configuration
+     */
+    protected CacheConfiguration transactionalRegionConfiguration(String regionName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+
+        cfg.setName(regionName);
+
+        cfg.setCacheMode(PARTITIONED);
+
+        cfg.setAtomicityMode(TRANSACTIONAL);
+
+        cfg.setWriteSynchronizationMode(FULL_SYNC);
+
+        cfg.setBackups(1);
+
+        cfg.setStatisticsEnabled(true);
+
+        cfg.setAffinity(new RendezvousAffinityFunction(false, 10));
+
+        return cfg;
+    }
+
+    /**
+     * @return Hibernate registry builder.
+     */
+    protected StandardServiceRegistryBuilder registryBuilder() {
+        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
+
+        builder.applySetting("hibernate.connection.url", CONNECTION_URL);
+
+        return builder;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        startGrids(2);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        cleanup();
+    }
+
+    /**
+     * @return Hibernate L2 cache access types to test.
+     */
+    protected AccessType[] accessTypes() {
+        return new AccessType[]{AccessType.READ_ONLY, AccessType.NONSTRICT_READ_WRITE, AccessType.READ_WRITE};
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testCollectionCache() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testCollectionCache(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("unchecked")
+    private void testCollectionCache(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        Map<Integer, Integer> idToChildCnt = new HashMap<>();
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 3; i++) {
+                    Entity e = new Entity(i, "name-" + i);
+
+                    Collection<ChildEntity> children = new ArrayList<>();
+
+                    for (int j = 0; j < 3; j++)
+                        children.add(new ChildEntity());
+
+                    e.setChildren(children);
+
+                    idToChildCnt.put(e.getId(), e.getChildren().size());
+
+                    ses.save(e);
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            // Load children, this should populate cache.
+
+            ses = sesFactory1.openSession();
+
+            try {
+                List<Entity> list = ses.createCriteria(ENTITY_NAME).list();
+
+                assertEquals(idToChildCnt.size(), list.size());
+
+                for (Entity e : list)
+                    assertEquals((int) idToChildCnt.get(e.getId()), e.getChildren().size());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertCollectionCache(sesFactory2, idToChildCnt, 3, 0);
+            assertCollectionCache(sesFactory1, idToChildCnt, 3, 0);
+
+            if (accessType == AccessType.READ_ONLY)
+                return;
+
+            // Update children for one entity.
+
+            ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                e1.getChildren().remove(e1.getChildren().iterator().next());
+
+                ses.update(e1);
+
+                idToChildCnt.put(e1.getId(), e1.getChildren().size());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertCollectionCache(sesFactory2, idToChildCnt, 2, 1); // After update collection cache entry is removed.
+            assertCollectionCache(sesFactory1, idToChildCnt, 3, 0); // 'assertCollectionCache' loads children in cache.
+
+            // Update children for the same entity using another SessionFactory.
+
+            ses = sesFactory2.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                e1.getChildren().remove(e1.getChildren().iterator().next());
+
+                ses.update(e1);
+
+                idToChildCnt.put(e1.getId(), e1.getChildren().size());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertCollectionCache(sesFactory2, idToChildCnt, 2, 1); // After update collection cache entry is removed.
+            assertCollectionCache(sesFactory1, idToChildCnt, 3, 0); // 'assertCollectionCache' loads children in cache.
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testEntityCache() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testEntityCache(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testEntityCache(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        Map<Integer, String> idToName = new HashMap<>();
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 2; i++) {
+                    String name = "name-" + i;
+
+                    ses.save(new Entity(i, name));
+
+                    idToName.put(i, name);
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName, 100);
+
+            if (accessType == AccessType.READ_ONLY)
+                return;
+
+            ses = sesFactory1.openSession();
+
+            try {
+                // Updates and inserts in single transaction.
+
+                Transaction tx = ses.beginTransaction();
+
+                Entity e0 = (Entity)ses.load(Entity.class, 0);
+
+                e0.setName("name-0-changed1");
+
+                ses.update(e0);
+
+                idToName.put(0, e0.getName());
+
+                ses.save(new Entity(2, "name-2"));
+
+                idToName.put(2, "name-2");
+
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                e1.setName("name-1-changed1");
+
+                ses.update(e1);
+
+                idToName.put(1, e1.getName());
+
+                ses.save(new Entity(3, "name-3"));
+
+                idToName.put(3, "name-3");
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName);
+
+            ses = sesFactory1.openSession();
+
+            try {
+                // Updates, inserts and deletes in single transaction.
+
+                Transaction tx = ses.beginTransaction();
+
+                ses.save(new Entity(4, "name-4"));
+
+                idToName.put(4, "name-4");
+
+                Entity e0 = (Entity)ses.load(Entity.class, 0);
+
+                e0.setName("name-0-changed2");
+
+                ses.update(e0);
+
+                idToName.put(e0.getId(), e0.getName());
+
+                ses.delete(ses.load(Entity.class, 1));
+
+                idToName.remove(1);
+
+                Entity e2 = (Entity)ses.load(Entity.class, 2);
+
+                e2.setName("name-2-changed1");
+
+                ses.update(e2);
+
+                idToName.put(e2.getId(), e2.getName());
+
+                ses.delete(ses.load(Entity.class, 3));
+
+                idToName.remove(3);
+
+                ses.save(new Entity(5, "name-5"));
+
+                idToName.put(5, "name-5");
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName, 1, 3);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName, 1, 3);
+
+            // Try to update the same entity using another SessionFactory.
+
+            ses = sesFactory2.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity e0 = (Entity)ses.load(Entity.class, 0);
+
+                e0.setName("name-0-changed3");
+
+                ses.update(e0);
+
+                idToName.put(e0.getId(), e0.getName());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName);
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testTwoEntitiesSameCache() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testTwoEntitiesSameCache(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testTwoEntitiesSameCache(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            Map<Integer, String> idToName1 = new HashMap<>();
+            Map<Integer, String> idToName2 = new HashMap<>();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 2; i++) {
+                    String name = "name-" + i;
+
+                    ses.save(new Entity(i, name));
+                    ses.save(new Entity2(i, name));
+
+                    idToName1.put(i, name);
+                    idToName2.put(i, name);
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName1, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName1, 100);
+
+            assertEntityCache(ENTITY2_NAME, sesFactory2, idToName2, 100);
+            assertEntityCache(ENTITY2_NAME, sesFactory1, idToName2, 100);
+
+            if (accessType == AccessType.READ_ONLY)
+                return;
+
+            ses = sesFactory1.openSession();
+
+            try {
+                // Updates both entities in single transaction.
+
+                Transaction tx = ses.beginTransaction();
+
+                Entity e = (Entity)ses.load(Entity.class, 0);
+
+                e.setName("name-0-changed1");
+
+                ses.update(e);
+
+                Entity2 e2 = (Entity2)ses.load(Entity2.class, 0);
+
+                e2.setName("name-e2-0-changed1");
+
+                ses.update(e2);
+
+                idToName1.put(0, e.getName());
+                idToName2.put(0, e2.getName());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName1, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName1, 100);
+
+            assertEntityCache(ENTITY2_NAME, sesFactory2, idToName2, 100);
+            assertEntityCache(ENTITY2_NAME, sesFactory1, idToName2, 100);
+
+            ses = sesFactory1.openSession();
+
+            try {
+                // Remove entity1 and insert entity2 in single transaction.
+
+                Transaction tx = ses.beginTransaction();
+
+                Entity e = (Entity)ses.load(Entity.class, 0);
+
+                ses.delete(e);
+
+                Entity2 e2 = new Entity2(2, "name-2");
+
+                ses.save(e2);
+
+                idToName1.remove(0);
+                idToName2.put(2, e2.getName());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName1, 0, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName1, 0, 100);
+
+            assertEntityCache(ENTITY2_NAME, sesFactory2, idToName2, 100);
+            assertEntityCache(ENTITY2_NAME, sesFactory1, idToName2, 100);
+
+            ses = sesFactory1.openSession();
+
+            Transaction tx = ses.beginTransaction();
+
+            try {
+                // Update, remove, insert in single transaction, transaction fails.
+
+                Entity e = (Entity)ses.load(Entity.class, 1);
+
+                e.setName("name-1-changed1");
+
+                ses.update(e); // Valid update.
+
+                ses.save(new Entity(2, "name-2")); // Valid insert.
+
+                ses.delete(ses.load(Entity2.class, 0)); // Valid delete.
+
+                Entity2 e2 = (Entity2)ses.load(Entity2.class, 1);
+
+                e2.setName("name-2");  // Invalid update, not-unique name.
+
+                ses.update(e2);
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (PersistenceException e) {
+                assertEquals(ConstraintViolationException.class, e.getCause().getClass());
+                log.info("Expected exception: " + e);
+
+                tx.rollback();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName1, 0, 2, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName1, 0, 2, 100);
+
+            assertEntityCache(ENTITY2_NAME, sesFactory2, idToName2, 100);
+            assertEntityCache(ENTITY2_NAME, sesFactory1, idToName2, 100);
+
+            ses = sesFactory2.openSession();
+
+            try {
+                // Update, remove, insert in single transaction.
+
+                tx = ses.beginTransaction();
+
+                Entity e = (Entity)ses.load(Entity.class, 1);
+
+                e.setName("name-1-changed1");
+
+                ses.update(e);
+
+                idToName1.put(1, e.getName());
+
+                ses.save(new Entity(2, "name-2"));
+
+                idToName1.put(2, "name-2");
+
+                ses.delete(ses.load(Entity2.class, 0));
+
+                idToName2.remove(0);
+
+                Entity2 e2 = (Entity2)ses.load(Entity2.class, 1);
+
+                e2.setName("name-e2-2-changed");
+
+                ses.update(e2);
+
+                idToName2.put(1, e2.getName());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName1, 0, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName1, 0, 100);
+
+            assertEntityCache(ENTITY2_NAME, sesFactory2, idToName2, 0, 100);
+            assertEntityCache(ENTITY2_NAME, sesFactory1, idToName2, 0, 100);
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testVersionedEntity() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testVersionedEntity(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testVersionedEntity(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            VersionedEntity e0 = new VersionedEntity(0);
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                ses.save(e0);
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            ses = sesFactory1.openSession();
+
+            long ver;
+
+            try {
+                ver = ((VersionedEntity)ses.load(VersionedEntity.class, 0)).getVersion();
+            }
+            finally {
+                ses.close();
+            }
+
+            CacheRegionStatistics stats1 =
+                sesFactory1.getStatistics().getCacheRegionStatistics(VERSIONED_ENTITY_NAME);
+            CacheRegionStatistics stats2 =
+                sesFactory2.getStatistics().getCacheRegionStatistics(VERSIONED_ENTITY_NAME);
+
+            assertEquals(1, stats1.getElementCountInMemory());
+            assertEquals(1, stats2.getElementCountInMemory());
+
+            ses = sesFactory2.openSession();
+
+            try {
+                assertEquals(ver, ((VersionedEntity)ses.load(VersionedEntity.class, 0)).getVersion());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(1, stats2.getElementCountInMemory());
+            assertEquals(1, stats2.getHitCount());
+
+            if (accessType == AccessType.READ_ONLY)
+                return;
+
+            e0.setVersion(ver - 1);
+
+            ses = sesFactory1.openSession();
+
+            Transaction tx = ses.beginTransaction();
+
+            try {
+                ses.update(e0);
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (OptimisticLockException e) {
+                log.info("Expected exception: " + e);
+            }
+            finally {
+                tx.rollback();
+
+                ses.close();
+            }
+
+            sesFactory1.getStatistics().clear();
+
+            stats1 = sesFactory1.getStatistics().getCacheRegionStatistics(VERSIONED_ENTITY_NAME);
+
+            ses = sesFactory1.openSession();
+
+            try {
+                assertEquals(ver, ((VersionedEntity)ses.load(VersionedEntity.class, 0)).getVersion());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(1, stats1.getElementCountInMemory());
+            assertEquals(1, stats1.getHitCount());
+            assertEquals(1, stats2.getElementCountInMemory());
+            assertEquals(1, stats2.getHitCount());
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testNaturalIdCache() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testNaturalIdCache(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testNaturalIdCache(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        Map<String, Integer> nameToId = new HashMap<>();
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 3; i++) {
+                    String name = "name-" + i;
+
+                    ses.save(new Entity(i, name));
+
+                    nameToId.put(name, i);
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            ses = sesFactory1.openSession();
+
+            try {
+                for (Map.Entry<String, Integer> e : nameToId.entrySet())
+                    ((Entity) ses.bySimpleNaturalId(Entity.class).load(e.getKey())).getId();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertNaturalIdCache(sesFactory2, nameToId, "name-100");
+            assertNaturalIdCache(sesFactory1, nameToId, "name-100");
+
+            if (accessType == AccessType.READ_ONLY)
+                return;
+
+            // Update naturalId.
+
+            ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                nameToId.remove(e1.getName());
+
+                e1.setName("name-1-changed1");
+
+                nameToId.put(e1.getName(), e1.getId());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertNaturalIdCache(sesFactory2, nameToId, "name-1");
+            assertNaturalIdCache(sesFactory1, nameToId, "name-1");
+
+            // Update entity using another SessionFactory.
+
+            ses = sesFactory2.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                nameToId.remove(e1.getName());
+
+                e1.setName("name-1-changed2");
+
+                nameToId.put(e1.getName(), e1.getId());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertNaturalIdCache(sesFactory2, nameToId, "name-1-changed1");
+            assertNaturalIdCache(sesFactory1, nameToId, "name-1-changed1");
+
+            // Try invalid NaturalId update.
+
+            ses = sesFactory1.openSession();
+
+            Transaction tx = ses.beginTransaction();
+
+            try {
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                e1.setName("name-0"); // Invalid update (duplicated name).
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (PersistenceException e) {
+                assertEquals(ConstraintViolationException.class, e.getCause().getClass());
+                log.info("Expected exception: " + e);
+
+                tx.rollback();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertNaturalIdCache(sesFactory2, nameToId);
+            assertNaturalIdCache(sesFactory1, nameToId);
+
+            // Delete entity.
+
+            ses = sesFactory2.openSession();
+
+            try {
+                tx = ses.beginTransaction();
+
+                Entity e2 = (Entity)ses.load(Entity.class, 2);
+
+                ses.delete(e2);
+
+                nameToId.remove(e2.getName());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertNaturalIdCache(sesFactory2, nameToId, "name-2");
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testEntityCacheTransactionFails() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testEntityCacheTransactionFails(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testEntityCacheTransactionFails(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        Map<Integer, String> idToName = new HashMap<>();
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 3; i++) {
+                    String name = "name-" + i;
+
+                    ses.save(new Entity(i, name));
+
+                    idToName.put(i, name);
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName, 100);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName, 100);
+
+            ses = sesFactory1.openSession();
+
+            Transaction tx = ses.beginTransaction();
+
+            try {
+                ses.save(new Entity(3, "name-3")); // Valid insert.
+
+                ses.save(new Entity(0, "name-0")); // Invalid insert (duplicated ID).
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (PersistenceException e) {
+                assertEquals(ConstraintViolationException.class, e.getCause().getClass());
+                log.info("Expected exception: " + e);
+
+                tx.rollback();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName, 3);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName, 3);
+
+            if (accessType == AccessType.READ_ONLY)
+                return;
+
+            ses = sesFactory1.openSession();
+
+            tx = ses.beginTransaction();
+
+            try {
+                Entity e0 = (Entity)ses.load(Entity.class, 0);
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                e0.setName("name-10"); // Valid update.
+                e1.setName("name-2"); // Invalid update (violates unique constraint).
+
+                ses.update(e0);
+                ses.update(e1);
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (PersistenceException e) {
+                assertEquals(ConstraintViolationException.class, e.getCause().getClass());
+                log.info("Expected exception: " + e);
+
+                tx.rollback();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName);
+
+            ses = sesFactory1.openSession();
+
+            try {
+                // Create parent entity referencing Entity with ID = 0.
+
+                tx = ses.beginTransaction();
+
+                ses.save(new ParentEntity(0, (Entity) ses.load(Entity.class, 0)));
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            ses = sesFactory1.openSession();
+
+            tx = ses.beginTransaction();
+
+            try {
+                ses.save(new Entity(3, "name-3")); // Valid insert.
+
+                Entity e1 = (Entity)ses.load(Entity.class, 1);
+
+                e1.setName("name-10"); // Valid update.
+
+                ses.delete(ses.load(Entity.class, 0)); // Invalid delete (there is a parent entity referencing it).
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (PersistenceException e) {
+                assertEquals(ConstraintViolationException.class, e.getCause().getClass());
+                log.info("Expected exception: " + e);
+
+                tx.rollback();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName, 3);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName, 3);
+
+            ses = sesFactory1.openSession();
+
+            tx = ses.beginTransaction();
+
+            try {
+                ses.delete(ses.load(Entity.class, 1)); // Valid delete.
+
+                idToName.remove(1);
+
+                ses.delete(ses.load(Entity.class, 0)); // Invalid delete (there is a parent entity referencing it).
+
+                tx.commit();
+
+                fail("Commit must fail.");
+            }
+            catch (PersistenceException e) {
+                assertEquals(ConstraintViolationException.class, e.getCause().getClass());
+                log.info("Expected exception: " + e);
+
+                tx.rollback();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEntityCache(ENTITY_NAME, sesFactory2, idToName);
+            assertEntityCache(ENTITY_NAME, sesFactory1, idToName);
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testQueryCache() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testQueryCache(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testQueryCache(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        try {
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < 5; i++)
+                    ses.save(new Entity(i, "name-" + i));
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            // This sleep is needed in the case that the transaction above completes and the next transaction
+            // starts in less than 1 ms, meaning the transaction timestamps are the same.
+            // In this scenario the entity update time == query cache update time since the times are stored
+            // using the transaction start time.  If those values are equal then the query cache will not be
+            // used in the third transaction and the failure will manifest itself in this assertion
+            // 'assertEquals(2, sesFactory2.getStatistics().getQueryCacheHitCount());'
+            // This behavior is in TimestampsCacheEnabledImpl.isUpToDate() line: if ( lastUpdate >= timestamp ) {...}
+            // It is not a hibernate bug, ms just doesn't have the best time resolution.
+            // The way to fix it may be to update the HibernateRegionFactory.nextTimestamp()
+            // to return a microsecond timestamp.  This may be doable in java 9.
+            Thread.sleep(1);
+
+            // Run some queries.
+
+            ses = sesFactory1.openSession();
+
+            try {
+                Query qry1 = ses.createQuery("from " + ENTITY_NAME + " where id > 2");
+
+                qry1.setCacheable(true);
+
+                assertEquals(2, qry1.list().size());
+
+                Query qry2 = ses.createQuery("from " + ENTITY_NAME + " where name = 'name-0'");
+
+                qry2.setCacheable(true);
+
+                assertEquals(1, qry2.list().size());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(0, sesFactory1.getStatistics().getQueryCacheHitCount());
+            assertEquals(2, sesFactory1.getStatistics().getQueryCacheMissCount());
+            assertEquals(2, sesFactory1.getStatistics().getQueryCachePutCount());
+
+            // Run queries using another SessionFactory.  The first two queries should now be cached
+
+            ses = sesFactory2.openSession();
+
+            try {
+                Query qry1 = ses.createQuery("from " + ENTITY_NAME + " where id > 2");
+
+                qry1.setCacheable(true);
+
+                assertEquals(2, qry1.list().size());
+
+                Query qry2 = ses.createQuery("from " + ENTITY_NAME + " where name = 'name-0'");
+
+                qry2.setCacheable(true);
+
+                assertEquals(1, qry2.list().size());
+
+                Query qry3 = ses.createQuery("from " + ENTITY_NAME + " where id > 1");
+
+                qry3.setCacheable(true);
+
+                assertEquals(3, qry3.list().size());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(2, sesFactory2.getStatistics().getQueryCacheHitCount());
+            assertEquals(1, sesFactory2.getStatistics().getQueryCacheMissCount());
+            assertEquals(1, sesFactory2.getStatistics().getQueryCachePutCount());
+
+            // Update entity, it should invalidate query cache.
+
+            ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                ses.save(new Entity(5, "name-5"));
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            // Run queries.
+
+            ses = sesFactory1.openSession();
+
+            sesFactory1.getStatistics().clear();
+
+            try {
+                Query qry1 = ses.createQuery("from " + ENTITY_NAME + " where id > 2");
+
+                qry1.setCacheable(true);
+
+                assertEquals(3, qry1.list().size());
+
+                Query qry2 = ses.createQuery("from " + ENTITY_NAME + " where name = 'name-0'");
+
+                qry2.setCacheable(true);
+
+                assertEquals(1, qry2.list().size());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(0, sesFactory1.getStatistics().getQueryCacheHitCount());
+            assertEquals(2, sesFactory1.getStatistics().getQueryCacheMissCount());
+            assertEquals(2, sesFactory1.getStatistics().getQueryCachePutCount());
+
+            // Clear query cache using another SessionFactory.
+
+            sesFactory2.getCache().evictDefaultQueryRegion();
+
+            ses = sesFactory1.openSession();
+
+            // Run queries again.
+
+            sesFactory1.getStatistics().clear();
+
+            try {
+                Query qry1 = ses.createQuery("from " + ENTITY_NAME + " where id > 2");
+
+                qry1.setCacheable(true);
+
+                assertEquals(3, qry1.list().size());
+
+                Query qry2 = ses.createQuery("from " + ENTITY_NAME + " where name = 'name-0'");
+
+                qry2.setCacheable(true);
+
+                assertEquals(1, qry2.list().size());
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(0, sesFactory1.getStatistics().getQueryCacheHitCount());
+            assertEquals(2, sesFactory1.getStatistics().getQueryCacheMissCount());
+            assertEquals(2, sesFactory1.getStatistics().getQueryCachePutCount());
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testRegionClear() throws Exception {
+        for (AccessType accessType : accessTypes())
+            testRegionClear(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testRegionClear(AccessType accessType) throws Exception {
+        createSessionFactories(accessType);
+
+        try {
+            final int ENTITY_CNT = 100;
+
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                for (int i = 0; i < ENTITY_CNT; i++) {
+                    Entity e = new Entity(i, "name-" + i);
+
+                    Collection<ChildEntity> children = new ArrayList<>();
+
+                    for (int j = 0; j < 3; j++)
+                        children.add(new ChildEntity());
+
+                    e.setChildren(children);
+
+                    ses.save(e);
+                }
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            loadEntities(sesFactory2, ENTITY_CNT);
+
+            CacheRegionStatistics stats1 = sesFactory1.getStatistics().getCacheRegionStatistics(ENTITY_NAME);
+            CacheRegionStatistics stats2 = sesFactory2.getStatistics().getCacheRegionStatistics(ENTITY_NAME);
+
+            CacheRegionStatistics idStats1 =
+                sesFactory1.getStatistics().getCacheRegionStatistics(NATURAL_ID_REGION);
+            CacheRegionStatistics idStats2 =
+                sesFactory2.getStatistics().getCacheRegionStatistics(NATURAL_ID_REGION);
+
+            CacheRegionStatistics colStats1 =
+                sesFactory1.getStatistics().getDomainDataRegionStatistics(CHILD_COLLECTION_REGION);
+            CacheRegionStatistics colStats2 =
+                sesFactory2.getStatistics().getDomainDataRegionStatistics(CHILD_COLLECTION_REGION);
+
+            assertEquals(ENTITY_CNT, stats1.getElementCountInMemory());
+            assertEquals(ENTITY_CNT, stats2.getElementCountInMemory());
+
+            assertEquals(ENTITY_CNT, idStats1.getElementCountInMemory());
+            assertEquals(ENTITY_CNT, idStats2.getElementCountInMemory());
+
+            assertEquals(ENTITY_CNT, colStats1.getElementCountInMemory());
+            assertEquals(ENTITY_CNT, colStats2.getElementCountInMemory());
+
+            // Test cache is cleared after update query.
+
+            ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                ses.createQuery("delete from " + ENTITY_NAME + " where name='no such name'").executeUpdate();
+
+                ses.createQuery("delete from " + ChildEntity.class.getName() + " where id=-1").executeUpdate();
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            assertEquals(0, stats1.getElementCountInMemory());
+            assertEquals(0, stats2.getElementCountInMemory());
+
+            assertEquals(0, idStats1.getElementCountInMemory());
+            assertEquals(0, idStats2.getElementCountInMemory());
+
+            assertEquals(0, colStats1.getElementCountInMemory());
+            assertEquals(0, colStats2.getElementCountInMemory());
+
+            // Load some data in cache.
+
+            loadEntities(sesFactory1, 10);
+
+            assertEquals(10, stats1.getElementCountInMemory());
+            assertEquals(10, stats2.getElementCountInMemory());
+            assertEquals(10, idStats1.getElementCountInMemory());
+            assertEquals(10, idStats2.getElementCountInMemory());
+
+            // Test evictAll method.
+
+            sesFactory2.getCache().evictEntityRegion(ENTITY_NAME);
+
+            assertEquals(0, stats1.getElementCountInMemory());
+            assertEquals(0, stats2.getElementCountInMemory());
+
+            sesFactory2.getCache().evictNaturalIdRegion(ENTITY_NAME);
+
+            assertEquals(0, idStats1.getElementCountInMemory());
+            assertEquals(0, idStats2.getElementCountInMemory());
+
+            sesFactory2.getCache().evictCollectionRegion(CHILD_COLLECTION_REGION);
+
+            assertEquals(0, colStats1.getElementCountInMemory());
+            assertEquals(0, colStats2.getElementCountInMemory());
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @param sesFactory Session factory.
+     * @param nameToId Name-ID mapping.
+     * @param absentNames Absent entities' names.
+     */
+    private void assertNaturalIdCache(SessionFactory sesFactory, Map<String, Integer> nameToId, String... absentNames) {
+        sesFactory.getStatistics().clear();
+
+        CacheRegionStatistics stats = sesFactory.getStatistics().getCacheRegionStatistics(NATURAL_ID_REGION);
+
+        long hitBefore = stats.getHitCount();
+
+        long missBefore = stats.getMissCount();
+
+        final Session ses = sesFactory.openSession();
+
+        try {
+            for (Map.Entry<String, Integer> e : nameToId.entrySet())
+                assertEquals((int) e.getValue(), ((Entity) ses.bySimpleNaturalId(Entity.class).load(e.getKey())).getId());
+
+            for (String name : absentNames)
+                assertNull((ses.bySimpleNaturalId(Entity.class).load(name)));
+
+            assertEquals(nameToId.size() + hitBefore, stats.getHitCount());
+
+            assertEquals(absentNames.length + missBefore, stats.getMissCount());
+        }
+        finally {
+            ses.close();
+        }
+    }
+
+    /**
+     * @param sesFactory Session factory.
+     * @param idToChildCnt Number of children per entity.
+     * @param expHit Expected cache hits.
+     * @param expMiss Expected cache misses.
+     */
+    @SuppressWarnings("unchecked")
+    private void assertCollectionCache(SessionFactory sesFactory, Map<Integer, Integer> idToChildCnt, int expHit,
+        int expMiss) {
+        sesFactory.getStatistics().clear();
+
+        Session ses = sesFactory.openSession();
+
+        try {
+            for(Map.Entry<Integer, Integer> e : idToChildCnt.entrySet()) {
+                Entity entity = (Entity)ses.load(Entity.class, e.getKey());
+
+                assertEquals((int)e.getValue(), entity.getChildren().size());
+            }
+        }
+        finally {
+            ses.close();
+        }
+
+        CacheRegionStatistics stats = sesFactory.getStatistics().getCacheRegionStatistics(CHILD_COLLECTION_REGION);
+
+        assertEquals(expHit, stats.getHitCount());
+
+        assertEquals(expMiss, stats.getMissCount());
+    }
+
+    /**
+     * @param sesFactory Session factory.
+     * @param cnt Number of entities to load.
+     */
+    private void loadEntities(SessionFactory sesFactory, int cnt) {
+        Session ses = sesFactory.openSession();
+
+        try {
+            for (int i = 0; i < cnt; i++) {
+                Entity e = (Entity)ses.load(Entity.class, i);
+
+                assertEquals("name-" + i, e.getName());
+
+                assertFalse(e.getChildren().isEmpty());
+
+                ses.bySimpleNaturalId(Entity.class).load(e.getName());
+            }
+        }
+        finally {
+            ses.close();
+        }
+    }
+
+    /**
+     * @param entityName Entity name.
+     * @param sesFactory Session factory.
+     * @param idToName ID to name mapping.
+     * @param absentIds Absent entities' IDs.
+     */
+    private void assertEntityCache(String entityName, SessionFactory sesFactory, Map<Integer, String> idToName,
+                                   Integer... absentIds) {
+        assert entityName.equals(ENTITY_NAME) || entityName.equals(ENTITY2_NAME) : entityName;
+
+        sesFactory.getStatistics().clear();
+
+        final Session ses = sesFactory.openSession();
+
+        final boolean entity1 = entityName.equals(ENTITY_NAME);
+
+        try {
+            if (entity1) {
+                for (Map.Entry<Integer, String> e : idToName.entrySet())
+                    assertEquals(e.getValue(), ((Entity) ses.load(Entity.class, e.getKey())).getName());
+                }
+            else {
+                for (Map.Entry<Integer, String> e : idToName.entrySet())
+                    assertEquals(e.getValue(), ((Entity2) ses.load(Entity2.class, e.getKey())).getName());
+            }
+
+            for (final int id : absentIds) {
+                GridTestUtils.assertThrows(log, new Callable<Void>() {
+                    @Override public Void call() throws Exception {
+                        if (entity1)
+                            ((Entity) ses.load(Entity.class, id)).getName();
+                        else
+                            ((Entity2) ses.load(Entity2.class, id)).getName();
+
+                        return null;
+                    }
+                }, ObjectNotFoundException.class, null);
+            }
+
+            CacheRegionStatistics stats = sesFactory.getStatistics().getCacheRegionStatistics(entityName);
+            assertEquals(idToName.size(), stats.getHitCount());
+
+            assertEquals(absentIds.length, stats.getMissCount());
+        }
+        finally {
+            ses.close();
+        }
+    }
+
+    /**
+     * Creates session factories.
+     *
+     * @param accessType Cache access type.
+     */
+    private void createSessionFactories(AccessType accessType) {
+        sesFactory1 = startHibernate(accessType, getTestIgniteInstanceName(0));
+
+        sesFactory2 = startHibernate(accessType, getTestIgniteInstanceName(1));
+    }
+
+    /**
+     * Starts Hibernate.
+     *
+     * @param accessType Cache access type.
+     * @param igniteInstanceName Ignite instance name.
+     * @return Session factory.
+     */
+    private SessionFactory startHibernate(org.hibernate.cache.spi.access.AccessType accessType, String igniteInstanceName) {
+        StandardServiceRegistryBuilder builder = registryBuilder();
+
+        for (Map.Entry<String, String> e : hibernateProperties(igniteInstanceName, accessType.name()).entrySet())
+            builder.applySetting(e.getKey(), e.getValue());
+
+        // Use the same cache for Entity and Entity2.
+        builder.applySetting(REGION_CACHE_PROPERTY + ENTITY2_NAME, ENTITY_NAME);
+
+        StandardServiceRegistry srvcRegistry = builder.build();
+
+        MetadataSources metadataSources = new MetadataSources(srvcRegistry);
+
+        for (Class entityClass : getAnnotatedClasses())
+            metadataSources.addAnnotatedClass(entityClass);
+
+        Metadata metadata = metadataSources.buildMetadata();
+
+        for (PersistentClass entityBinding : metadata.getEntityBindings()) {
+            if (!entityBinding.isInherited())
+                ((RootClass) entityBinding).setCacheConcurrencyStrategy(accessType.getExternalName());
+        }
+
+        for (org.hibernate.mapping.Collection collectionBinding : metadata.getCollectionBindings())
+            collectionBinding.setCacheConcurrencyStrategy(accessType.getExternalName());
+
+        return metadata.buildSessionFactory();
+    }
+
+    /**
+     * @return Entities classes.
+     */
+    private Class[] getAnnotatedClasses() {
+        return new Class[]{Entity.class, Entity2.class, VersionedEntity.class, ChildEntity.class, ParentEntity.class};
+    }
+
+    /**
+     * Closes session factories and clears data from caches.
+     *
+     * @throws Exception If failed.
+     */
+    private void cleanup() throws Exception {
+        if (sesFactory1 != null)
+            sesFactory1.close();
+
+        sesFactory1 = null;
+
+        if (sesFactory2 != null)
+            sesFactory2.close();
+
+        sesFactory2 = null;
+
+        for (IgniteCacheProxy<?, ?> cache : ((IgniteKernal)grid(0)).caches())
+            cache.clear();
+    }
+
+    /**
+     * @param igniteInstanceName Node name.
+     * @param dfltAccessType Default cache access type.
+     * @return Properties map.
+     */
+    static Map<String, String> hibernateProperties(String igniteInstanceName, String dfltAccessType) {
+        Map<String, String> map = new HashMap<>();
+
+        map.put(HBM2DDL_AUTO, "create");
+        map.put(JPA_SHARED_CACHE_MODE, SharedCacheMode.ALL.name());
+        map.put(GENERATE_STATISTICS, "true");
+        map.put(USE_SECOND_LEVEL_CACHE, "true");
+        map.put(USE_QUERY_CACHE, "true");
+        map.put(CACHE_REGION_FACTORY, HibernateRegionFactory.class.getName());
+        map.put(RELEASE_CONNECTIONS, "on_close");
+        map.put(IGNITE_INSTANCE_NAME_PROPERTY, igniteInstanceName);
+        map.put(DFLT_ACCESS_TYPE_PROPERTY, dfltAccessType);
+
+        return map;
+    }
+}


[28/52] [abbrv] ignite git commit: IGNITE-10289: [ML] Import models from XGBoost

Posted by sb...@apache.org.
IGNITE-10289: [ML] Import models from XGBoost

This closes #5533


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4ae29fca
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4ae29fca
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4ae29fca

Branch: refs/heads/ignite-627
Commit: 4ae29fca74e814321c8448e00e9d3fdcd54733aa
Parents: ece5869
Author: Anton Dmitriev <dm...@gmail.com>
Authored: Tue Dec 18 18:31:26 2018 +0300
Committer: Yury Babak <yb...@gridgain.com>
Committed: Tue Dec 18 18:31:26 2018 +0300

----------------------------------------------------------------------
 examples/pom.xml                                |    6 +
 .../TensorFlowDistributedInferenceExample.java  |    2 +-
 .../TensorFlowLocalInferenceExample.java        |    2 +-
 .../TensorFlowThreadedInferenceExample.java     |    2 +-
 .../ml/xgboost/XGBoostModelParserExample.java   |   99 ++
 .../examples/ml/xgboost/package-info.java       |   22 +
 .../resources/datasets/agaricus-test-data.txt   | 1611 ++++++++++++++++++
 .../datasets/agaricus-test-expected-results.txt | 1611 ++++++++++++++++++
 .../resources/ml/mnist_tf_model/saved_model.pb  |  Bin 37185 -> 0 bytes
 .../variables/variables.data-00000-of-00001     |  Bin 13098544 -> 0 bytes
 .../ml/mnist_tf_model/variables/variables.index |  Bin 410 -> 0 bytes
 .../models/mnist_tf_model/saved_model.pb        |  Bin 0 -> 37185 bytes
 .../variables/variables.data-00000-of-00001     |  Bin 0 -> 13098544 bytes
 .../mnist_tf_model/variables/variables.index    |  Bin 0 -> 410 bytes
 .../resources/models/xgboost/agaricus-model.txt |  714 ++++++++
 .../IgniteDistributedInfModelBuilder.java       |    7 +-
 modules/ml/xgboost-model-parser/pom.xml         |   55 +
 .../ignite/ml/xgboost/MapBasedXGObject.java     |   61 +
 .../apache/ignite/ml/xgboost/XGLeafNode.java    |   38 +
 .../org/apache/ignite/ml/xgboost/XGModel.java   |   53 +
 .../org/apache/ignite/ml/xgboost/XGNode.java    |   29 +
 .../org/apache/ignite/ml/xgboost/XGObject.java  |   33 +
 .../apache/ignite/ml/xgboost/XGSplitNode.java   |   74 +
 .../apache/ignite/ml/xgboost/package-info.java  |   22 +
 .../xgboost/parser/XGBoostModelBaseVisitor.java |   78 +
 .../ml/xgboost/parser/XGBoostModelLexer.java    |  210 +++
 .../ml/xgboost/parser/XGBoostModelListener.java |   98 ++
 .../ml/xgboost/parser/XGBoostModelParser.java   |  966 +++++++++++
 .../ml/xgboost/parser/XGBoostModelVisitor.java  |   71 +
 .../ignite/ml/xgboost/parser/XGModelParser.java |   87 +
 .../ignite/ml/xgboost/parser/package-info.java  |   22 +
 .../xgboost/parser/visitor/XGModelVisitor.java  |   43 +
 .../xgboost/parser/visitor/XGTreeVisitor.java   |   82 +
 .../ml/xgboost/parser/visitor/package-info.java |   22 +
 .../ml/xgboost/IgniteMLXGBoostTestSuite.java    |   31 +
 .../xgboost/parser/XGBoostModelParserTest.java  |   85 +
 .../test/resources/datasets/agaricus-model.txt  |  714 ++++++++
 .../resources/datasets/agaricus-test-data.txt   | 1611 ++++++++++++++++++
 .../datasets/agaricus-test-expected-results.txt | 1611 ++++++++++++++++++
 parent/pom.xml                                  |    2 +-
 pom.xml                                         |    1 +
 41 files changed, 10168 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/pom.xml
----------------------------------------------------------------------
diff --git a/examples/pom.xml b/examples/pom.xml
index c6b0a5f..44dab95 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -84,6 +84,12 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-ml-xgboost-model-parser</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
             <groupId>commons-cli</groupId>
             <artifactId>commons-cli</artifactId>
             <version>1.2</version>

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
index ec8cac6..48e8df1 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowDistributedInferenceExample.java
@@ -44,7 +44,7 @@ import org.tensorflow.Tensor;
  */
 public class TensorFlowDistributedInferenceExample {
     /** Path to the directory with saved TensorFlow model. */
-    private static final String MODEL_PATH = "examples/src/main/resources/ml/mnist_tf_model";
+    private static final String MODEL_PATH = "examples/src/main/resources/models/mnist_tf_model";
 
     /** Path to the MNIST images data. */
     private static final String MNIST_IMG_PATH = "examples/src/main/resources/datasets/t10k-images-idx3-ubyte";

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
index 0e79856..c907778 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowLocalInferenceExample.java
@@ -38,7 +38,7 @@ import org.tensorflow.Tensor;
  */
 public class TensorFlowLocalInferenceExample {
     /** Path to the directory with saved TensorFlow model. */
-    private static final String MODEL_PATH = "examples/src/main/resources/ml/mnist_tf_model";
+    private static final String MODEL_PATH = "examples/src/main/resources/models/mnist_tf_model";
 
     /** Path to the MNIST images data. */
     private static final String MNIST_IMG_PATH = "examples/src/main/resources/datasets/t10k-images-idx3-ubyte";

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
index 002e5ae..93dadea 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/inference/TensorFlowThreadedInferenceExample.java
@@ -42,7 +42,7 @@ import org.tensorflow.Tensor;
  */
 public class TensorFlowThreadedInferenceExample {
     /** Path to the directory with saved TensorFlow model. */
-    private static final String MODEL_PATH = "examples/src/main/resources/ml/mnist_tf_model";
+    private static final String MODEL_PATH = "examples/src/main/resources/models/mnist_tf_model";
 
     /** Path to the MNIST images data. */
     private static final String MNIST_IMG_PATH = "examples/src/main/resources/datasets/t10k-images-idx3-ubyte";

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
new file mode 100644
index 0000000..40f10d8
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/XGBoostModelParserExample.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.examples.ml.xgboost;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.internal.util.IgniteUtils;
+import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.builder.AsyncInfModelBuilder;
+import org.apache.ignite.ml.inference.builder.IgniteDistributedInfModelBuilder;
+import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
+import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.xgboost.MapBasedXGObject;
+import org.apache.ignite.ml.xgboost.XGObject;
+import org.apache.ignite.ml.xgboost.parser.XGModelParser;
+
+/**
+ * This example demonstrates how to import XGBoost model and use imported model for distributed inference in Apache
+ * Ignite.
+ */
+public class XGBoostModelParserExample {
+    /** Test model resource name. */
+    private static final String TEST_MODEL_RES = "examples/src/main/resources/models/xgboost/agaricus-model.txt";
+
+    /** Test data. */
+    private static final String TEST_DATA_RES = "examples/src/main/resources/datasets/agaricus-test-data.txt";
+
+    /** Test expected results. */
+    private static final String TEST_ER_RES = "examples/src/main/resources/datasets/agaricus-test-expected-results.txt";
+
+    /** Parser. */
+    private static final XGModelParser parser = new XGModelParser();
+
+    /** Run example. */
+    public static void main(String... args) throws ExecutionException, InterruptedException, FileNotFoundException {
+        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+            File mdlRsrc = IgniteUtils.resolveIgnitePath(TEST_MODEL_RES);
+            if (mdlRsrc == null)
+                throw new IllegalArgumentException("File not found [resource_path=" + TEST_MODEL_RES + "]");
+
+            InfModelReader reader = new FileSystemInfModelReader(mdlRsrc.getPath());
+
+            AsyncInfModelBuilder mdlBuilder = new IgniteDistributedInfModelBuilder(ignite, 4, 4);
+
+            File testData = IgniteUtils.resolveIgnitePath(TEST_DATA_RES);
+            if (testData == null)
+                throw new IllegalArgumentException("File not found [resource_path=" + TEST_DATA_RES + "]");
+
+            File testExpRes = IgniteUtils.resolveIgnitePath(TEST_ER_RES);
+            if (testExpRes == null)
+                throw new IllegalArgumentException("File not found [resource_path=" + TEST_ER_RES + "]");
+
+            try (InfModel<XGObject, Future<Double>> mdl = mdlBuilder.build(reader, parser);
+                 Scanner testDataScanner = new Scanner(testData);
+                 Scanner testExpResultsScanner = new Scanner(testExpRes)) {
+
+                while (testDataScanner.hasNextLine()) {
+                    String testDataStr = testDataScanner.nextLine();
+                    String testExpResultsStr = testExpResultsScanner.nextLine();
+
+                    MapBasedXGObject testObj = new MapBasedXGObject();
+
+                    for (String keyValueString : testDataStr.split(" ")) {
+                        String[] keyVal = keyValueString.split(":");
+
+                        if (keyVal.length == 2)
+                            testObj.put("f" + keyVal[0], Double.parseDouble(keyVal[1]));
+                    }
+
+                    double prediction = mdl.predict(testObj).get();
+
+                    double expPrediction = Double.parseDouble(testExpResultsStr);
+
+                    System.out.println("Expected: " + expPrediction + ", prediction: " + prediction);
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java
new file mode 100644
index 0000000..3f14631
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/xgboost/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * XGBoost model inference examples.
+ */
+package org.apache.ignite.examples.ml.xgboost;
\ No newline at end of file


[08/52] [abbrv] ignite git commit: IGNITE-845 Removing test

Posted by sb...@apache.org.
IGNITE-845 Removing test


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8cb502bc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8cb502bc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8cb502bc

Branch: refs/heads/ignite-627
Commit: 8cb502bc9da52aca39d4dc067a6b36a298c6b376
Parents: 91a82a5
Author: Dmitriy Pavlov <dp...@apache.org>
Authored: Mon Dec 17 18:30:39 2018 +0300
Committer: Dmitriy Pavlov <dp...@apache.org>
Committed: Mon Dec 17 18:31:33 2018 +0300

----------------------------------------------------------------------
 .../cloud/TcpDiscoveryCloudIpFinderSelfTest.java         | 11 -----------
 1 file changed, 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/8cb502bc/modules/cloud/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/cloud/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinderSelfTest.java b/modules/cloud/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinderSelfTest.java
index e4cef65..89744a2 100644
--- a/modules/cloud/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinderSelfTest.java
+++ b/modules/cloud/src/test/java/org/apache/ignite/spi/discovery/tcp/ipfinder/cloud/TcpDiscoveryCloudIpFinderSelfTest.java
@@ -61,17 +61,6 @@ public class TcpDiscoveryCloudIpFinderSelfTest extends
     }
 
     /**
-     * Tests AWS.
-     *
-     * @throws Exception If any error occurs.
-     */
-    @IgniteIgnore("https://issues.apache.org/jira/browse/IGNITE-845")
-    @Test
-    public void testAmazonWebServices() throws Exception {
-        testCloudProvider("aws-ec2");
-    }
-
-    /**
      * Tests GCE.
      *
      * @throws Exception If any error occurs.


[14/52] [abbrv] ignite git commit: IGNITE-10643: SQL: Unified affinity key column resolution for queries. This closes #5641. This closes #5649.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
index 90a3cc6..c542758 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2Utils.java
@@ -388,12 +388,10 @@ public class H2Utils {
      * @param tbl Table to check on not started cache.
      * @return {@code true} in case not started and has been started.
      */
-    public static boolean checkAndStartNotStartedCache(GridH2Table tbl) {
+    public static boolean checkAndStartNotStartedCache(GridKernalContext ctx, GridH2Table tbl) {
         if (tbl != null && tbl.isCacheLazy()) {
             String cacheName = tbl.cacheInfo().config().getName();
 
-            GridKernalContext ctx = tbl.cacheInfo().context();
-
             try {
                 Boolean res = ctx.cache().dynamicStartCache(null, cacheName, null, false, true, true).get();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index f9f0ce4..c2f3f89 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -435,7 +435,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
                 H2RowCache cache = rowCache.forGroup(cacheInfo.groupId());
 
                 return new H2TreeIndex(
-                    cacheInfo.gridCacheContext(),
+                    cacheInfo.cacheContext(),
                     cache,
                     tbl,
                     name,
@@ -2611,7 +2611,7 @@ public class IgniteH2Indexing implements GridQueryIndexing {
                 GridH2Table tbl = schemaMgr.dataTable(tblKey.schema(), tblKey.table());
 
                 if (tbl != null) {
-                    H2Utils.checkAndStartNotStartedCache(tbl);
+                    H2Utils.checkAndStartNotStartedCache(ctx, tbl);
 
                     int cacheId = tbl.cacheId();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
index c57b011..cf27d90 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/affinity/PartitionExtractor.java
@@ -20,7 +20,6 @@ package org.apache.ignite.internal.processors.query.h2.affinity;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.internal.processors.cache.query.GridCacheSqlQuery;
 import org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing;
-import org.apache.ignite.internal.processors.query.h2.opt.GridH2RowDescriptor;
 import org.apache.ignite.internal.processors.query.h2.opt.GridH2Table;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlAlias;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlAst;
@@ -35,15 +34,12 @@ import org.apache.ignite.internal.processors.query.h2.sql.GridSqlSelect;
 import org.apache.ignite.internal.processors.query.h2.sql.GridSqlTable;
 import org.apache.ignite.internal.util.typedef.F;
 import org.h2.table.Column;
-import org.h2.table.IndexColumn;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import static org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueRowOnheap.DEFAULT_COLUMNS_COUNT;
-
 /**
  * Partition tree extractor.
  */
@@ -102,6 +98,7 @@ public class PartitionExtractor {
      * @param qrys Queries.
      * @return Partition result or {@code null} if nothing is resolved.
      */
+    @SuppressWarnings("IfMayBeConditional")
     public PartitionResult merge(List<GridCacheSqlQuery> qrys) {
         // Check if merge is possible.
         PartitionTableDescriptor desc = null;
@@ -149,7 +146,7 @@ public class PartitionExtractor {
      * @param from From.
      * @return Table or {@code null} if not a table.
      */
-   @Nullable private static GridSqlTable unwrapTable(GridSqlAst from) {
+    @Nullable private static GridSqlTable unwrapTable(GridSqlAst from) {
         if (from instanceof GridSqlAlias)
             from = from.child();
 
@@ -165,6 +162,7 @@ public class PartitionExtractor {
      * @param expr Expression.
      * @return Partition tree.
      */
+    @SuppressWarnings("EnumSwitchStatementWhichMissesCases")
     private PartitionNode extractFromExpression(GridSqlAst expr) throws IgniteCheckedException {
         PartitionNode res = PartitionAllNode.INSTANCE;
 
@@ -343,7 +341,7 @@ public class PartitionExtractor {
 
         GridH2Table tbl = (GridH2Table)leftCol.getTable();
 
-        if (!isAffinityKey(leftCol.getColumnId(), tbl))
+        if (!tbl.isColumnForPartitionPruning(leftCol))
             return null;
 
         PartitionTableDescriptor tblDesc = descriptor(tbl);
@@ -360,32 +358,6 @@ public class PartitionExtractor {
     }
 
     /**
-     *
-     * @param colId Column ID to check
-     * @param tbl H2 Table
-     * @return is affinity key or not
-     */
-    private static boolean isAffinityKey(int colId, GridH2Table tbl) {
-        GridH2RowDescriptor desc = tbl.rowDescriptor();
-
-        if (desc.isKeyColumn(colId))
-            return true;
-
-        IndexColumn affKeyCol = tbl.getAffinityKeyColumn();
-
-        try {
-            return
-                affKeyCol != null &&
-                colId >= DEFAULT_COLUMNS_COUNT &&
-                desc.isColumnKeyProperty(colId - DEFAULT_COLUMNS_COUNT) &&
-                colId == affKeyCol.column.getColumnId();
-        }
-        catch (IllegalStateException e) {
-            return false;
-        }
-    }
-
-    /**
      * Get descriptor from table.
      *
      * @param tbl Table.

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
index f1826a1..efccb6c 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/dml/UpdatePlanBuilder.java
@@ -113,7 +113,7 @@ public final class UpdatePlanBuilder {
         boolean mvccEnabled = false;
 
         for (GridH2Table h2tbl : tbls) {
-            H2Utils.checkAndStartNotStartedCache(h2tbl);
+            H2Utils.checkAndStartNotStartedCache(idx.kernalContext(), h2tbl);
 
             if (prevCctx == null) {
                 prevCctx = h2tbl.cacheContext();

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
index 5e574e4..2a92511 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2CollocationModel.java
@@ -375,7 +375,7 @@ public final class GridH2CollocationModel {
         GridH2Table tbl = (GridH2Table)tf.getTable();
 
         if (validate) {
-            if (tbl.rowDescriptor().context().customAffinityMapper())
+            if (tbl.isCustomAffinityMapper())
                 throw customAffinityError(tbl.cacheName());
 
             if (F.isEmpty(tf.getIndexConditions())) {
@@ -472,10 +472,12 @@ public final class GridH2CollocationModel {
         }
 
         if (t instanceof GridH2Table) {
-            if (validate && ((GridH2Table)t).rowDescriptor().context().customAffinityMapper())
-                throw customAffinityError(((GridH2Table)t).cacheName());
+            GridH2Table t0 = (GridH2Table)t;
 
-            IndexColumn affCol = ((GridH2Table)t).getAffinityKeyColumn();
+            if (validate && t0.isCustomAffinityMapper())
+                throw customAffinityError((t0).cacheName());
+
+            IndexColumn affCol = t0.getAffinityKeyColumn();
 
             return affCol != null && col.getColumnId() == affCol.column.getColumnId();
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
index 6fd11c1..6c45c29 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2IndexBase.java
@@ -87,6 +87,7 @@ import static org.apache.ignite.internal.processors.query.h2.opt.GridH2Collocati
 import static org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueRowOnheap.KEY_COL;
 import static org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryType.MAP;
 import static org.apache.ignite.internal.processors.query.h2.opt.GridH2QueryType.PREPARE;
+import static org.apache.ignite.internal.processors.query.h2.opt.GridH2RowDescriptor.COL_NOT_EXISTS;
 import static org.apache.ignite.internal.processors.query.h2.twostep.msg.GridH2IndexRangeResponse.STATUS_ERROR;
 import static org.apache.ignite.internal.processors.query.h2.twostep.msg.GridH2IndexRangeResponse.STATUS_NOT_FOUND;
 import static org.apache.ignite.internal.processors.query.h2.twostep.msg.GridH2IndexRangeResponse.STATUS_OK;
@@ -1048,6 +1049,9 @@ public abstract class GridH2IndexBase extends BaseIndex {
          * @return Affinity key or {@code null}.
          */
         private Object getAffinityKey(SearchRow firstRow, SearchRow lastRow) {
+            if (affColId == COL_NOT_EXISTS)
+                return null;
+
             if (firstRow == null || lastRow == null)
                 return null;
 
@@ -1109,7 +1113,7 @@ public abstract class GridH2IndexBase extends BaseIndex {
                 rangeStreams = new HashMap<>();
             }
 
-            Object affKey = affColId == -1 ? null : getAffinityKey(firstRow, lastRow);
+            Object affKey = getAffinityKey(firstRow, lastRow);
 
             boolean locQry = localQuery();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
index 3853b57..4ba8229 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2RowDescriptor.java
@@ -44,6 +44,9 @@ import static org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueR
  * Row descriptor.
  */
 public class GridH2RowDescriptor {
+    /** Non existent column. */
+    public static final int COL_NOT_EXISTS = -1;
+
     /** Table descriptor. */
     private final H2TableDescriptor tbl;
 
@@ -119,11 +122,11 @@ public class GridH2RowDescriptor {
 
         List<String> fieldsList = Arrays.asList(fields);
 
-        keyAliasColId =
-            (type.keyFieldName() != null) ? DEFAULT_COLUMNS_COUNT + fieldsList.indexOf(type.keyFieldAlias()) : -1;
+        keyAliasColId = (type.keyFieldName() != null) ?
+            DEFAULT_COLUMNS_COUNT + fieldsList.indexOf(type.keyFieldAlias()) : COL_NOT_EXISTS;
 
-        valAliasColId =
-            (type.valueFieldName() != null) ? DEFAULT_COLUMNS_COUNT + fieldsList.indexOf(type.valueFieldAlias()) : -1;
+        valAliasColId = (type.valueFieldName() != null) ?
+            DEFAULT_COLUMNS_COUNT + fieldsList.indexOf(type.valueFieldAlias()) : COL_NOT_EXISTS;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
index 59597be..b69a011 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/opt/GridH2Table.java
@@ -62,7 +62,7 @@ import org.jetbrains.annotations.Nullable;
 
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueRowOnheap.DEFAULT_COLUMNS_COUNT;
-import static org.apache.ignite.internal.processors.query.h2.opt.GridH2KeyValueRowOnheap.KEY_COL;
+import static org.apache.ignite.internal.processors.query.h2.opt.GridH2RowDescriptor.COL_NOT_EXISTS;
 
 /**
  * H2 Table implementation.
@@ -99,7 +99,10 @@ public class GridH2Table extends TableBase {
     private final ConcurrentMap<Session, Boolean> sessions = new ConcurrentHashMap<>();
 
     /** */
-    private IndexColumn affKeyCol;
+    private final IndexColumn affKeyCol;
+
+    /** */
+    private final int affKeyColId;
 
     /** */
     private final LongAdder size = new LongAdder();
@@ -138,32 +141,36 @@ public class GridH2Table extends TableBase {
         this.desc = desc;
         this.cacheInfo = cacheInfo;
 
-        if (desc.context() != null && !desc.context().customAffinityMapper()) {
-            boolean affinityColExists = true;
-
-            String affKey = desc.type().affinityKey();
+        if (!desc.type().customAffinityKeyMapper()) {
+            String affKeyFieldName = desc.type().affinityKey();
 
-            int affKeyColId = -1;
+            if (affKeyFieldName != null) {
+                if (doesColumnExist(affKeyFieldName)) {
+                    int colId = getColumn(affKeyFieldName).getColumnId();
 
-            if (affKey != null) {
-                if (doesColumnExist(affKey)) {
-                    affKeyColId = getColumn(affKey).getColumnId();
-
-                    if (desc.isKeyColumn(affKeyColId))
-                        affKeyColId = KEY_COL;
+                    if (desc.isKeyColumn(colId)) {
+                        affKeyCol = indexColumn(GridH2KeyValueRowOnheap.KEY_COL, SortOrder.ASCENDING);
+                        affKeyColId = GridH2KeyValueRowOnheap.KEY_COL;
+                    }
+                    else {
+                        affKeyCol = indexColumn(colId, SortOrder.ASCENDING);
+                        affKeyColId = colId;
+                    }
+                }
+                else {
+                    affKeyCol = null;
+                    affKeyColId = COL_NOT_EXISTS;
                 }
-                else
-                    affinityColExists = false;
             }
-            else
-                affKeyColId = KEY_COL;
-
-            if (affinityColExists) {
-                affKeyCol = indexColumn(affKeyColId, SortOrder.ASCENDING);
-
-                assert affKeyCol != null;
+            else {
+                affKeyCol = indexColumn(GridH2KeyValueRowOnheap.KEY_COL, SortOrder.ASCENDING);
+                affKeyColId = GridH2KeyValueRowOnheap.KEY_COL;
             }
         }
+        else {
+            affKeyCol = null;
+            affKeyColId = COL_NOT_EXISTS;
+        }
 
         this.rowFactory = rowFactory;
 
@@ -216,6 +223,25 @@ public class GridH2Table extends TableBase {
         return affKeyCol;
     }
 
+    /**
+     * Check whether passed column can be used for partition pruning.
+     *
+     * @param col Column.
+     * @return {@code True} if affinity key column.
+     */
+    public boolean isColumnForPartitionPruning(Column col) {
+        int colId = col.getColumnId();
+
+        return colId == affKeyColId || desc.isKeyColumn(colId);
+    }
+
+    /**
+     * @return Whether custom affintiy mapper is used.
+     */
+    public boolean isCustomAffinityMapper() {
+        return desc.type().customAffinityKeyMapper();
+    }
+
     /** {@inheritDoc} */
     @Override public long getDiskSpaceUsed() {
         return 0;
@@ -253,14 +279,14 @@ public class GridH2Table extends TableBase {
      * @return {@code true} If Cache is lazy (not full inited).
      */
     public boolean isCacheLazy() {
-        return cacheInfo.gridCacheContext() == null;
+        return cacheInfo.cacheContext() == null;
     }
 
     /**
      * @return Cache context.
      */
     @Nullable public GridCacheContext cacheContext() {
-        return cacheInfo.gridCacheContext();
+        return cacheInfo.cacheContext();
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/AffinityKeyNameAndValueFieldNameConflictTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/AffinityKeyNameAndValueFieldNameConflictTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/AffinityKeyNameAndValueFieldNameConflictTest.java
index ff147e7..23e71e2 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/AffinityKeyNameAndValueFieldNameConflictTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/AffinityKeyNameAndValueFieldNameConflictTest.java
@@ -93,6 +93,11 @@ public class AffinityKeyNameAndValueFieldNameConflictTest extends GridCommonAbst
         return cfg;
     }
 
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        stopAllGrids();
+    }
+
     /**
      * @throws Exception If failed.
      */
@@ -123,6 +128,7 @@ public class AffinityKeyNameAndValueFieldNameConflictTest extends GridCommonAbst
     public void testAnnotationConfig() throws Exception {
         keyCls = PersonKey1.class;
         keyProducer = PersonKey1::new;
+
         checkQuery();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDistributedJoinCollocatedAndNotTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDistributedJoinCollocatedAndNotTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDistributedJoinCollocatedAndNotTest.java
index 80923a7..1036cce 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDistributedJoinCollocatedAndNotTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheDistributedJoinCollocatedAndNotTest.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.cache;
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.ignite.Ignite;
@@ -89,6 +90,7 @@ public class IgniteCacheDistributedJoinCollocatedAndNotTest extends GridCommonAb
             entity.addQueryField("id", Integer.class.getName(), null);
             entity.addQueryField("affKey", Integer.class.getName(), null);
             entity.addQueryField("name", String.class.getName(), null);
+            entity.setKeyFields(Collections.singleton("affKey"));
 
             ccfg.setQueryEntities(F.asList(entity));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/AndOperationExtractPartitionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/AndOperationExtractPartitionSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/AndOperationExtractPartitionSelfTest.java
index a94910e..a3fae72 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/AndOperationExtractPartitionSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/AndOperationExtractPartitionSelfTest.java
@@ -81,7 +81,7 @@ public class AndOperationExtractPartitionSelfTest extends GridCommonAbstractTest
 
         orgCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, JoinSqlTestHelper.Organization>(ORG)
             .setCacheMode(CacheMode.PARTITIONED)
-            .setIndexedTypes(String.class, JoinSqlTestHelper.Organization.class)
+            .setQueryEntities(JoinSqlTestHelper.organizationQueryEntity())
         );
 
         awaitPartitionMapExchange();

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheCauseRetryMessageSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheCauseRetryMessageSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheCauseRetryMessageSelfTest.java
index b9c846a..7d13503 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheCauseRetryMessageSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheCauseRetryMessageSelfTest.java
@@ -97,7 +97,7 @@ public class DisappearedCacheCauseRetryMessageSelfTest extends GridCommonAbstrac
                         if (reqId == req.queryRequestId())
                             orgCache = DisappearedCacheCauseRetryMessageSelfTest.this.ignite(0).getOrCreateCache(new CacheConfiguration<String, Organization>(ORG)
                                 .setCacheMode(CacheMode.REPLICATED)
-                                .setIndexedTypes(String.class, JoinSqlTestHelper.Organization.class)
+                                .setQueryEntities(JoinSqlTestHelper.organizationQueryEntity())
                             );
 
                     }
@@ -117,12 +117,12 @@ public class DisappearedCacheCauseRetryMessageSelfTest extends GridCommonAbstrac
         startGridsMultiThreaded(NODES_COUNT, false);
 
         personCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, Person>("pers")
-            .setIndexedTypes(String.class, JoinSqlTestHelper.Person.class)
+            .setQueryEntities(JoinSqlTestHelper.personQueryEntity())
         );
 
         orgCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, Organization>(ORG)
             .setCacheMode(CacheMode.REPLICATED)
-            .setIndexedTypes(String.class, JoinSqlTestHelper.Organization.class)
+            .setQueryEntities(JoinSqlTestHelper.organizationQueryEntity())
         );
 
         awaitPartitionMapExchange();

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheWasNotFoundMessageSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheWasNotFoundMessageSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheWasNotFoundMessageSelfTest.java
index 08a7973..dfc8bb6 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheWasNotFoundMessageSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/DisappearedCacheWasNotFoundMessageSelfTest.java
@@ -111,12 +111,12 @@ public class DisappearedCacheWasNotFoundMessageSelfTest extends GridCommonAbstra
         startGridsMultiThreaded(NODES_COUNT, false);
 
         personCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, Person>("pers")
-            .setIndexedTypes(String.class, JoinSqlTestHelper.Person.class)
+            .setQueryEntities(JoinSqlTestHelper.personQueryEntity())
         );
 
         orgCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, Organization>(ORG)
                 .setCacheMode(CacheMode.REPLICATED)
-                .setIndexedTypes(String.class, Organization.class)
+                .setQueryEntities(JoinSqlTestHelper.organizationQueryEntity())
         );
 
         awaitPartitionMapExchange();

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/InOperationExtractPartitionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/InOperationExtractPartitionSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/InOperationExtractPartitionSelfTest.java
index 7978943..c3222de 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/InOperationExtractPartitionSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/InOperationExtractPartitionSelfTest.java
@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.LongAdder;
 import org.apache.ignite.IgniteCache;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.query.FieldsQueryCursor;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.cluster.ClusterNode;
@@ -83,7 +84,7 @@ public class InOperationExtractPartitionSelfTest extends GridCommonAbstractTest
 
         orgCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, JoinSqlTestHelper.Organization>(ORG)
             .setCacheMode(CacheMode.PARTITIONED)
-            .setIndexedTypes(String.class, JoinSqlTestHelper.Organization.class)
+            .setQueryEntities(JoinSqlTestHelper.organizationQueryEntity())
         );
 
         awaitPartitionMapExchange();
@@ -191,7 +192,7 @@ public class InOperationExtractPartitionSelfTest extends GridCommonAbstractTest
     private void testInOperator(List<String> cnst, Object[] args, long expRes, int maxReq) {
         int curIdx = cnt.intValue();
 
-        String toIn = cnst.size() == 0 ? "" : String.valueOf("'" + String.join("','", cnst) + "'")
+        String toIn = cnst.isEmpty() ? "" : String.valueOf("'" + String.join("','", cnst) + "'")
             .replace("'?'", "?");
 
         try (FieldsQueryCursor<List<?>> cur = orgCache.query(new SqlFieldsQuery(

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/JoinSqlTestHelper.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/JoinSqlTestHelper.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/JoinSqlTestHelper.java
index 3c9509d..5eaf147 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/JoinSqlTestHelper.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/JoinSqlTestHelper.java
@@ -18,8 +18,12 @@
 package org.apache.ignite.internal.processors.query.h2.twostep;
 
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 
+import java.util.Collection;
+import java.util.Collections;
+
 /**
  * Join sql test helper
  */
@@ -39,6 +43,30 @@ public class JoinSqlTestHelper {
         "and lower(org.name) = lower(?)";
 
     /**
+     * @return Query entity for Organization.
+     */
+    static Collection<QueryEntity> organizationQueryEntity() {
+        QueryEntity entity = new QueryEntity(String.class, Organization.class);
+
+        entity.setKeyFieldName("ID");
+        entity.getFields().put("ID", String.class.getName());
+
+        return Collections.singletonList(entity);
+    }
+
+    /**
+     * @return Query entity for Organization.
+     */
+    static Collection<QueryEntity> personQueryEntity() {
+        QueryEntity entity = new QueryEntity(String.class, Person.class);
+
+        entity.setKeyFieldName("ID");
+        entity.getFields().put("ID", String.class.getName());
+
+        return Collections.singletonList(entity);
+    }
+
+    /**
      * Populate organization cache with test data
      * @param cache @{IgniteCache}
      */
@@ -46,11 +74,9 @@ public class JoinSqlTestHelper {
         for (int i = 0; i < ORG_COUNT; i++) {
             Organization org = new Organization();
 
-            org.setId(ORG + i);
-
             org.setName("Organization #" + i);
 
-            cache.put(org.getId(), org);
+            cache.put(ORG + i, org);
         }
     }
 
@@ -62,22 +88,16 @@ public class JoinSqlTestHelper {
         int personId = 0;
 
         for (int i = 0; i < ORG_COUNT; i++) {
-            Organization org = new Organization();
-
-            org.setId(ORG + i);
-
-            org.setName("Organization #" + i);
+            String orgId = ORG + i;
 
             for (int j = 0; j < PERSON_PER_ORG_COUNT; j++) {
                 Person prsn = new Person();
 
-                prsn.setId("pers" + personId);
-
-                prsn.setOrgId(org.getId());
+                prsn.setOrgId(orgId);
 
                 prsn.setName("Person name #" + personId);
 
-                cache.put(prsn.getId(), prsn);
+                cache.put("pers" + personId, prsn);
 
                 personId++;
             }
@@ -90,10 +110,6 @@ public class JoinSqlTestHelper {
     public static class Person {
         /** */
         @QuerySqlField(index = true)
-        private String id;
-
-        /** */
-        @QuerySqlField(index = true)
         private String orgId;
 
         /** */
@@ -101,16 +117,6 @@ public class JoinSqlTestHelper {
         private String name;
 
         /** */
-        public String getId() {
-            return id;
-        }
-
-        /** */
-        public void setId(String id) {
-            this.id = id;
-        }
-
-        /** */
         public String getOrgId() {
             return orgId;
         }
@@ -137,23 +143,9 @@ public class JoinSqlTestHelper {
     public static class Organization {
         /** */
         @QuerySqlField(index = true)
-        private String id;
-
-        /** */
-        @QuerySqlField(index = true)
         private String name;
 
         /** */
-        public void setId(String id) {
-            this.id = id;
-        }
-
-        /** */
-        public String getId() {
-            return id;
-        }
-
-        /** */
         public String getName() {
             return name;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/NonCollocatedRetryMessageSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/NonCollocatedRetryMessageSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/NonCollocatedRetryMessageSelfTest.java
index a1abb23..fb64c7f 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/NonCollocatedRetryMessageSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/NonCollocatedRetryMessageSelfTest.java
@@ -99,14 +99,14 @@ public class NonCollocatedRetryMessageSelfTest extends GridCommonAbstractTest {
         CacheConfiguration<String, JoinSqlTestHelper.Person> ccfg1 = new CacheConfiguration<>("pers");
 
         ccfg1.setBackups(1);
-        ccfg1.setIndexedTypes(String.class, JoinSqlTestHelper.Person.class);
+        ccfg1.setQueryEntities(JoinSqlTestHelper.personQueryEntity());
 
         personCache = ignite(0).getOrCreateCache(ccfg1);
 
         CacheConfiguration<String, JoinSqlTestHelper.Organization> ccfg2 = new CacheConfiguration<>(ORG);
 
         ccfg2.setBackups(1);
-        ccfg2.setIndexedTypes(String.class, JoinSqlTestHelper.Organization.class);
+        ccfg2.setQueryEntities(JoinSqlTestHelper.organizationQueryEntity());
 
         IgniteCache<String, JoinSqlTestHelper.Organization> orgCache = ignite(0).getOrCreateCache(ccfg2);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/RetryCauseMessageSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/RetryCauseMessageSelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/RetryCauseMessageSelfTest.java
index b3fb7bc..87cf353 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/RetryCauseMessageSelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/h2/twostep/RetryCauseMessageSelfTest.java
@@ -346,12 +346,12 @@ public class RetryCauseMessageSelfTest extends GridCommonAbstractTest {
         h2Idx = GridTestUtils.getFieldValue(qryProc, GridQueryProcessor.class, "idx");
 
         personCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, Person>("pers")
-            .setIndexedTypes(String.class, Person.class)
+            .setQueryEntities(JoinSqlTestHelper.personQueryEntity())
         );
 
         orgCache = ignite(0).getOrCreateCache(new CacheConfiguration<String, Organization>(ORG)
             .setCacheMode(CacheMode.REPLICATED)
-            .setIndexedTypes(String.class, Organization.class)
+            .setQueryEntities(JoinSqlTestHelper.organizationQueryEntity())
         );
 
         awaitPartitionMapExchange();


[32/52] [abbrv] ignite git commit: IGNITE-10709 New inspections introduced in 2018+ IntelliJ IDEA version were disabled on TC configuration, unused Suppress removal. - Fixes #5680.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
index 7210dfe..072918e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
@@ -70,15 +70,12 @@ public class GridNearAtomicUpdateFuture extends GridNearAtomicAbstractUpdateFutu
     private Collection<?> keys;
 
     /** Values. */
-    @SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"})
     private Collection<?> vals;
 
     /** Conflict put values. */
-    @SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"})
     private Collection<GridCacheDrInfo> conflictPutVals;
 
     /** Conflict remove values. */
-    @SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"})
     private Collection<GridCacheVersion> conflictRmvVals;
 
     /** Mappings if operations is mapped to more than one node. */
@@ -347,7 +344,6 @@ public class GridNearAtomicUpdateFuture extends GridNearAtomicAbstractUpdateFutu
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void onPrimaryResponse(UUID nodeId, GridNearAtomicUpdateResponse res, boolean nodeErr) {
         GridNearAtomicAbstractUpdateRequest req;
 
@@ -915,7 +911,6 @@ public class GridNearAtomicUpdateFuture extends GridNearAtomicAbstractUpdateFutu
      * @return Mapping.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     private Map<UUID, PrimaryRequestState> mapUpdate(Collection<ClusterNode> topNodes,
         AffinityTopologyVersion topVer,
         Long futId,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
index 8fc353c..a6ac902 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/colocated/GridDhtColocatedCache.java
@@ -210,7 +210,6 @@ public class GridDhtColocatedCache<K, V> extends GridDhtTransactionalCacheAdapte
                         needVer);
 
                     return fut.chain(new CX1<IgniteInternalFuture<Map<Object, Object>>, V>() {
-                        @SuppressWarnings("unchecked")
                         @Override public V applyx(IgniteInternalFuture<Map<Object, Object>> e)
                             throws IgniteCheckedException {
                             Map<Object, Object> map = e.get();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysFuture.java
index 323fe75..9d6c8fc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtForceKeysFuture.java
@@ -166,7 +166,6 @@ public final class GridDhtForceKeysFuture<K, V> extends GridCompoundFuture<Objec
     /**
      * @param evt Discovery event.
      */
-    @SuppressWarnings( {"unchecked"})
     public void onDiscoveryEvent(DiscoveryEvent evt) {
         topCntr.incrementAndGet();
 
@@ -192,7 +191,6 @@ public final class GridDhtForceKeysFuture<K, V> extends GridCompoundFuture<Objec
     /**
      * @param res Response.
      */
-    @SuppressWarnings( {"unchecked"})
     public void onResult(GridDhtForceKeysResponse res) {
         for (IgniteInternalFuture<Object> f : futures())
             if (isMini(f)) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionSupplier.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionSupplier.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionSupplier.java
index 9254766..d26d68f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionSupplier.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionSupplier.java
@@ -178,7 +178,6 @@ class GridDhtPartitionSupplier {
      * @param nodeId Id of the node which sent the demand message.
      * @param demandMsg Demand message.
      */
-    @SuppressWarnings("unchecked")
     public void handleDemandMessage(int topicId, UUID nodeId, GridDhtPartitionDemandMessage demandMsg) {
         assert demandMsg != null;
         assert nodeId != null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
index 8db7176..403b862 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsSingleMessage.java
@@ -210,7 +210,6 @@ public class GridDhtPartitionsSingleMessage extends GridDhtPartitionsAbstractMes
      * @param partsCnt Total cache partitions.
      * @return Partition update counters.
      */
-    @SuppressWarnings("unchecked")
     public CachePartitionPartialCountersMap partitionUpdateCounters(int grpId, int partsCnt) {
         Object res = partCntrs == null ? null : partCntrs.get(grpId);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
index 9fb6825..a6c17c0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridClientPartitionTopology.java
@@ -170,7 +170,6 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology {
     /**
      * @return Full map string representation.
      */
-    @SuppressWarnings({"ConstantConditions"})
     private String fullMapString() {
         return node2part == null ? "null" : FULL_MAP_DEBUG ? node2part.toFullString() : node2part.toString();
     }
@@ -179,7 +178,6 @@ public class GridClientPartitionTopology implements GridDhtPartitionTopology {
      * @param map Map to get string for.
      * @return Full map string representation.
      */
-    @SuppressWarnings({"ConstantConditions"})
     private String mapString(GridDhtPartitionMap map) {
         return map == null ? "null" : FULL_MAP_DEBUG ? map.toFullString() : map.toString();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
index c90d40f..bb62d64 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/topology/GridDhtPartitionTopologyImpl.java
@@ -217,7 +217,6 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
     /**
      * @return Full map string representation.
      */
-    @SuppressWarnings({"ConstantConditions"})
     private String fullMapString() {
         return node2part == null ? "null" : FULL_MAP_DEBUG ? node2part.toFullString() : node2part.toString();
     }
@@ -226,7 +225,6 @@ public class GridDhtPartitionTopologyImpl implements GridDhtPartitionTopology {
      * @param map Map to get string for.
      * @return Full map string representation.
      */
-    @SuppressWarnings({"ConstantConditions"})
     private String mapString(GridDhtPartitionMap map) {
         return map == null ? "null" : FULL_MAP_DEBUG ? map.toFullString() : map.toString();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java
index 503c324..998dcf9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java
@@ -447,13 +447,11 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<V> getAndPutAsync0(K key, V val, @Nullable CacheEntryPredicate filter) {
         return dht.getAndPutAsync0(key, val, filter);
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<Boolean> putAsync0(K key, V val, @Nullable CacheEntryPredicate filter) {
         return dht.putAsync0(key, val, filter);
     }
@@ -533,7 +531,6 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<V> getAndRemoveAsync(K key) {
         return dht.getAndRemoveAsync(key);
     }
@@ -555,7 +552,6 @@ public class GridNearAtomicCache<K, V> extends GridNearCacheAdapter<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<Boolean> removeAsync(K key, @Nullable CacheEntryPredicate filter) {
         return dht.removeAsync(key, filter);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
index 09445f7..40dbf6a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearGetFuture.java
@@ -570,7 +570,6 @@ public final class GridNearGetFuture<K, V> extends CacheDistributedGetFutureAdap
      * @param v Value.
      * @param ver Version.
      */
-    @SuppressWarnings("unchecked")
     private void addResult(KeyCacheObject key, CacheObject v, GridCacheVersion ver) {
         if (keepCacheObjects) {
             K key0 = (K)key;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
index 0863f6e..3691250 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearLockFuture.java
@@ -151,7 +151,6 @@ public final class GridNearLockFuture extends GridCacheCompoundIdentityFuture<Bo
     private volatile int done;
 
     /** Keys locked so far. */
-    @SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"})
     @GridToStringExclude
     private List<GridDistributedCacheEntry> entries;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
index 20d9e50..ca9e1bf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
@@ -147,7 +147,6 @@ public final class GridNearTxFinishFuture<K, V> extends GridCacheCompoundIdentit
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public boolean onNodeLeft(UUID nodeId) {
         boolean found = false;
 
@@ -841,7 +840,6 @@ public final class GridNearTxFinishFuture<K, V> extends GridCacheCompoundIdentit
     /** {@inheritDoc} */
     @Override public String toString() {
         Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() {
-            @SuppressWarnings("unchecked")
             @Override public String apply(IgniteInternalFuture<?> f) {
                 if (f.getClass() == FinishMiniFuture.class) {
                     FinishMiniFuture fut = (FinishMiniFuture)f;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
index ef74de4..fb2f8e3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -412,7 +412,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou
      * @param retval Flag indicating whether a value should be returned.
      * @return Future for put operation.
      */
-    @SuppressWarnings("unchecked")
     public <K, V> IgniteInternalFuture<GridCacheReturn> putAllAsync(
         GridCacheContext cacheCtx,
         @Nullable AffinityTopologyVersion entryTopVer,
@@ -481,7 +480,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou
      * @param invokeArgs Optional arguments for entry processor.
      * @return Operation future.
      */
-    @SuppressWarnings("unchecked")
     public <K, V, T> IgniteInternalFuture<GridCacheReturn> invokeAsync(
         GridCacheContext cacheCtx,
         @Nullable AffinityTopologyVersion entryTopVer,
@@ -3990,7 +3988,6 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou
      * @param req Prepare request.
      * @return Future that will be completed when locks are acquired.
      */
-    @SuppressWarnings("TypeMayBeWeakened")
     public IgniteInternalFuture<GridNearTxPrepareResponse> prepareAsyncLocal(GridNearTxPrepareRequest req) {
         long timeout = remainingTime();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
index 919f6d2..dc7e3ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/local/atomic/GridLocalAtomicCache.java
@@ -122,7 +122,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected V getAndPut0(K key, V val, @Nullable CacheEntryPredicate filter) throws IgniteCheckedException {
         CacheOperationContext opCtx = ctx.operationContextPerCall();
 
@@ -233,7 +232,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void removeAll0(Collection<? extends K> keys) throws IgniteCheckedException {
         CacheOperationContext opCtx = ctx.operationContextPerCall();
 
@@ -256,7 +254,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public boolean remove0(K key, final CacheEntryPredicate filter) throws IgniteCheckedException {
         CacheOperationContext opCtx = ctx.operationContextPerCall();
 
@@ -295,7 +292,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected V get0(
         final K key,
         String taskName,
@@ -314,7 +310,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public final Map<K, V> getAll0(Collection<? extends K> keys, boolean deserializeBinary, boolean needVer)
         throws IgniteCheckedException {
         A.notNull(keys, "keys");
@@ -675,7 +670,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> Map<K, EntryProcessorResult<T>> invokeAll(
         Map<? extends K, ? extends EntryProcessor<K, V, T>> map,
         Object... args) throws IgniteCheckedException {
@@ -1556,7 +1550,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<Boolean> lockAllAsync(@Nullable Collection<? extends K> keys,
         long timeout) {
         return new GridFinishedFuture<>(new UnsupportedOperationException("Locks are not supported for " +
@@ -1564,7 +1557,6 @@ public class GridLocalAtomicCache<K, V> extends GridLocalCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void unlockAll(@Nullable Collection<? extends K> keys) throws IgniteCheckedException {
         throw new UnsupportedOperationException("Locks are not supported for " +
             "CacheAtomicityMode.ATOMIC mode (use CacheAtomicityMode.TRANSACTIONAL instead)");

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
index b840206..c448620 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/MvccProcessorImpl.java
@@ -2041,7 +2041,6 @@ public class MvccProcessorImpl extends GridProcessorAdapter implements MvccProce
     }
 
     /** */
-    @SuppressWarnings("unchecked")
     private static class CompoundWaiter implements Waiter {
         /** */
         private final Object inner;
@@ -2406,7 +2405,6 @@ public class MvccProcessorImpl extends GridProcessorAdapter implements MvccProce
          * @param metrics Vacuum metrics.
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("unchecked")
         private void cleanup(GridDhtLocalPartition part, KeyCacheObject key, List<MvccLinkAwareSearchRow> cleanupRows,
             Object rest, GridCacheContext cctx, VacuumMetrics metrics) throws IgniteCheckedException {
             assert key != null && cctx != null && (!F.isEmpty(cleanupRows) || rest != null);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
index ed55854..5f16ce8 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/pagemem/PageMemoryImpl.java
@@ -1079,7 +1079,6 @@ public class PageMemoryImpl implements PageMemoryEx {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked", "TooBroadScope"})
     @Override public void finishCheckpoint() {
         if (segments == null)
             return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
index 7b07dcf..e9b7248 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/BPlusTree.java
@@ -361,7 +361,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      */
     public class Replace extends GetPageHandler<Put> {
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public Result run0(long pageId, long page, long pageAddr, BPlusIO<L> io, Put p, int lvl)
             throws IgniteCheckedException  {
             // Check the triangle invariant.
@@ -1192,7 +1191,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public T findLast() throws IgniteCheckedException {
         return findLast(null);
     }
@@ -1242,7 +1240,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      * @return Found result or {@code null}.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public final <R> R findOne(L row, TreeRowClosure<L, T> c, Object x) throws IgniteCheckedException {
         checkDestroyed();
 
@@ -1269,7 +1266,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      * @return Found row.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     @Override public final T findOne(L row) throws IgniteCheckedException {
         return findOne(row, null, null);
     }
@@ -2898,7 +2894,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override boolean found(BPlusIO<L> io, long pageAddr, int idx, int lvl) throws IgniteCheckedException {
             // Check if we are on an inner page and can't get row from it.
             if (lvl != 0 && !canGetRowFromInner)
@@ -3042,7 +3037,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
          * @param cnt Number of rows in the buffer.
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("unchecked")
         private void visit(long pageAddr, BPlusIO<L> io, int startIdx, int cnt)
                 throws IgniteCheckedException {
             assert io.isLeaf() : io;
@@ -3983,7 +3977,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public long pollFreePage() {
             if (freePages == null)
                 return 0L;
@@ -4002,7 +3995,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void addFreePage(long pageId) {
             assert pageId != 0L;
 
@@ -4410,7 +4402,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
          * @param idx Index to remove.
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("unchecked")
         private void removeDataRowFromLeaf(long pageId, long page, long pageAddr, Boolean walPlc, BPlusIO<L> io, int cnt,
             int idx)
             throws IgniteCheckedException {
@@ -4642,7 +4633,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         /**
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("unchecked")
         private void reuseFreePages() throws IgniteCheckedException {
             // If we have a bag, then it will be processed at the upper level.
             if (reuseList != null && freePages != null)
@@ -5178,7 +5168,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     /**
      *
      */
-    @SuppressWarnings("unchecked")
     private abstract class AbstractForwardCursor {
         /** */
         long nextPageId;
@@ -5310,7 +5299,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
          * @return {@code true} If we were able to fetch rows from this page.
          * @throws IgniteCheckedException If failed.
          */
-        @SuppressWarnings("unchecked")
         private boolean fillFromBuffer(long pageAddr, BPlusIO<L> io, int startIdx, int cnt)
             throws IgniteCheckedException {
             assert io.isLeaf() : io;
@@ -5406,7 +5394,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     /**
      * Closure cursor.
      */
-    @SuppressWarnings("unchecked")
     private final class ClosureCursor extends AbstractForwardCursor {
         /** */
         private final TreeRowClosure<L, T> p;
@@ -5502,7 +5489,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
     /**
      * Forward cursor.
      */
-    @SuppressWarnings("unchecked")
     private final class ForwardCursor extends AbstractForwardCursor implements GridCursor<T> {
         /** */
         final Object x;
@@ -5592,7 +5578,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("SimplifiableIfStatement")
         @Override public boolean next() throws IgniteCheckedException {
             if (rows == null)
                 return false;
@@ -5643,7 +5628,6 @@ public abstract class BPlusTree<L, T extends L> extends DataStructure implements
      */
     private abstract class GetPageHandler<G extends Get> extends PageHandler<G, Result> {
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public Result run(int cacheId, long pageId, long page, long pageAddr, PageIO iox, Boolean walPlc,
             G g, int lvl, IoStatisticsHolder statHolder) throws IgniteCheckedException {
             assert PageIO.getPageId(pageAddr) == pageId;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
index 56ebb0f..423be3d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/tree/io/PageIO.java
@@ -616,7 +616,6 @@ public abstract class PageIO {
      * @return Page IO.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public static <Q extends PageIO> Q getPageIO(int type, int ver) throws IgniteCheckedException {
         switch (type) {
             case T_DATA:
@@ -674,7 +673,6 @@ public abstract class PageIO {
      * @return IO for either inner or leaf B+Tree page.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public static <Q extends BPlusIO<?>> Q getBPlusIO(int type, int ver) throws IgniteCheckedException {
         if (type >= T_H2_EX_REF_LEAF_START && type <= T_H2_EX_REF_LEAF_END)
             return (Q)h2ExtraLeafIOs.get(type - T_H2_EX_REF_LEAF_START).forVersion(ver);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryFuture.java
index 241a1e6..1380772 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryFuture.java
@@ -58,7 +58,6 @@ public class GridCacheDistributedQueryFuture<K, V, R> extends GridCacheQueryFutu
      * @param qry Query.
      * @param nodes Nodes.
      */
-    @SuppressWarnings("unchecked")
     protected GridCacheDistributedQueryFuture(GridCacheContext<K, V> ctx, long reqId, GridCacheQueryBean qry,
         Iterable<ClusterNode> nodes) {
         super(ctx, qry, false);
@@ -195,7 +194,6 @@ public class GridCacheDistributedQueryFuture<K, V, R> extends GridCacheQueryFutu
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NonPrivateFieldAccessedInSynchronizedContext")
     @Override protected void loadPage() {
         assert !Thread.holdsLock(this);
 
@@ -214,7 +212,6 @@ public class GridCacheDistributedQueryFuture<K, V, R> extends GridCacheQueryFutu
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NonPrivateFieldAccessedInSynchronizedContext")
     @Override protected void loadAllPages() throws IgniteInterruptedCheckedException {
         assert !Thread.holdsLock(this);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
index c5f64c9..0f9ee28 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheDistributedQueryManager.java
@@ -194,7 +194,6 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
      * @param sndId Sender node id.
      * @param req Query request.
      */
-    @SuppressWarnings("unchecked")
     @Override void processQueryRequest(UUID sndId, GridCacheQueryRequest req) {
         assert req.mvccSnapshot() != null || !cctx.mvccEnabled() || req.cancel() ||
             (req.type() == null && !req.fields()) : req; // Last assertion means next page request.
@@ -722,7 +721,6 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public CacheQueryFuture<?> queryFieldsDistributed(GridCacheQueryBean qry,
         Collection<ClusterNode> nodes) {
         assert cctx.config().getCacheMode() != LOCAL;
@@ -790,7 +788,6 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
      * @param nodes Nodes.
      * @throws IgniteCheckedException In case of error.
      */
-    @SuppressWarnings("unchecked")
     private void sendRequest(
         final GridCacheDistributedQueryFuture<?, ?, ?> fut,
         final GridCacheQueryRequest req,
@@ -892,7 +889,6 @@ public class GridCacheDistributedQueryManager<K, V> extends GridCacheQueryManage
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings({"unchecked"})
         @Override public boolean equals(Object obj) {
             if (obj == this)
                 return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
index 6f3772c..0dbdef1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
@@ -424,7 +424,6 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
     /**
      * @return Key-value filter.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <K, V> IgniteBiPredicate<K, V> scanFilter() {
         return (IgniteBiPredicate<K, V>)filter;
     }
@@ -432,7 +431,6 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
     /**
      * @return Transformer.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <K, V> IgniteClosure<Map.Entry<K, V>, Object> transform() {
         return (IgniteClosure<Map.Entry<K, V>, Object>)transform;
     }
@@ -477,7 +475,7 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
      * @param args Arguments.
      * @return Future.
      */
-    @SuppressWarnings({"IfMayBeConditional", "unchecked"})
+    @SuppressWarnings({"IfMayBeConditional"})
     private <R> CacheQueryFuture<R> execute0(@Nullable IgniteReducer<T, R> rmtReducer, @Nullable Object... args) {
         assert type != SCAN : this;
 
@@ -528,7 +526,6 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public GridCloseableIterator executeScanQuery() throws IgniteCheckedException {
         assert type == SCAN : "Wrong processing of query: " + type;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryFutureAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryFutureAdapter.java
index 140966e..4330cd0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryFutureAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryFutureAdapter.java
@@ -324,7 +324,6 @@ public abstract class GridCacheQueryFutureAdapter<K, V, R> extends GridFutureAda
     /**
      * @param col Collection.
      */
-    @SuppressWarnings({"unchecked"})
     protected void enqueue(Collection<?> col) {
         assert Thread.holdsLock(this);
 
@@ -338,7 +337,6 @@ public abstract class GridCacheQueryFutureAdapter<K, V, R> extends GridFutureAda
      * @return If dedup flag is {@code true} deduplicated collection (considering keys),
      *      otherwise passed in collection without any modifications.
      */
-    @SuppressWarnings({"unchecked"})
     private Collection<?> dedupIfRequired(Collection<?> col) {
         if (!qry.query().enableDedup())
             return col;
@@ -360,7 +358,6 @@ public abstract class GridCacheQueryFutureAdapter<K, V, R> extends GridFutureAda
      * @param err Error (if was).
      * @param finished Finished or not.
      */
-    @SuppressWarnings({"unchecked"})
     public void onPage(@Nullable UUID nodeId, @Nullable Collection<?> data, @Nullable Throwable err, boolean finished) {
         if (isCancelled())
             return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
index f42164e..8949a2f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryManager.java
@@ -1340,7 +1340,7 @@ public abstract class GridCacheQueryManager<K, V> extends GridCacheManagerAdapte
      * @param qry Query.
      * @param updateStatistics Update statistics flag.
      */
-    @SuppressWarnings({"unchecked", "serial"})
+    @SuppressWarnings({"unchecked"})
     protected GridCloseableIterator scanQueryLocal(final GridCacheQueryAdapter qry,
         boolean updateStatistics) throws IgniteCheckedException {
         if (!enterBusy())

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java
index a1650be..8e05c02 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponse.java
@@ -234,7 +234,6 @@ public class GridCacheQueryResponse extends GridCacheIdMessage implements GridCa
     /**
      * @param data Query data.
      */
-    @SuppressWarnings("unchecked")
     public void data(Collection<?> data) {
         this.data = (Collection<Object>)data;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponseEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponseEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponseEntry.java
index 650f0c0..5c63eaa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponseEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryResponseEntry.java
@@ -87,7 +87,6 @@ public class GridCacheQueryResponseEntry<K, V> implements Map.Entry<K, V>, Exter
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         key = (K)in.readObject();
         val = (V)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBuffer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBuffer.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBuffer.java
index 2fc6993..c707c72 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBuffer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBuffer.java
@@ -421,7 +421,6 @@ public class CacheContinuousQueryEventBuffer {
          * @param backup Backup entry flag.
          * @return New result.
          */
-        @SuppressWarnings("unchecked")
         @Nullable private Object processEntry0(
             @Nullable Object res,
             long cntr,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
index ade360a..503a514 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandler.java
@@ -1211,7 +1211,6 @@ public class CacheContinuousQueryHandler<K, V> implements GridContinuousHandler
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         cacheName = U.readString(in);
         topic = in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandlerV3.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandlerV3.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandlerV3.java
index 14d5605..78228f3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandlerV3.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryHandlerV3.java
@@ -156,7 +156,6 @@ public class CacheContinuousQueryHandlerV3<K, V> extends CacheContinuousQueryHan
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void writeExternal(ObjectOutput out) throws IOException {
         super.writeExternal(out);
 
@@ -171,7 +170,6 @@ public class CacheContinuousQueryHandlerV3<K, V> extends CacheContinuousQueryHan
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         super.readExternal(in);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
index 4c399bf..d688a52 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryManager.java
@@ -1216,7 +1216,6 @@ public class CacheContinuousQueryManager extends GridCacheManagerAdapter {
          * @param evt Event.
          * @return Singleton iterable.
          */
-        @SuppressWarnings("unchecked")
         private Iterable<CacheEntryEvent<? extends K, ? extends V>> singleton(
             CacheEntryEvent<? extends K, ? extends V> evt) {
             assert evt instanceof CacheContinuousQueryEvent;
@@ -1296,7 +1295,6 @@ public class CacheContinuousQueryManager extends GridCacheManagerAdapter {
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
             impl = (CacheEntryEventFilter)in.readObject();
             types = in.readByte();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
index 82ff3aa..fdf3649 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/store/GridCacheWriteBehindStore.java
@@ -531,7 +531,6 @@ public class GridCacheWriteBehindStore<K, V> implements CacheStore<K, V>, Lifecy
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void delete(Object key) {
         try {
             if (log.isDebugEnabled())

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
index 47a0276..8be90dd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxAdapter.java
@@ -1764,7 +1764,7 @@ public abstract class IgniteTxAdapter extends GridMetadataAwareAdapter implement
      * @throws IgniteCheckedException In case of eny exception.
      * @throws GridCacheEntryRemovedException If entry got removed.
      */
-    @SuppressWarnings({"unchecked", "ConstantConditions"})
+    @SuppressWarnings({"unchecked"})
     protected IgniteBiTuple<GridCacheOperation, GridCacheVersionConflictContext> conflictResolve(
         GridCacheOperation op,
         IgniteTxEntry txEntry,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
index df43615..c829d45 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxLocalAdapter.java
@@ -1177,7 +1177,6 @@ public abstract class IgniteTxLocalAdapter extends IgniteTxAdapter implements Ig
      * @param computeInvoke If {@code true} computes return value for invoke operation.
      * @throws IgniteCheckedException If error.
      */
-    @SuppressWarnings("unchecked")
     protected final void postLockWrite(
         GridCacheContext cacheCtx,
         Iterable<KeyCacheObject> keys,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
index a8b594b..ce914e8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/IgniteTxManager.java
@@ -737,7 +737,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
     /**
      * @return Transaction for current thread.
      */
-    @SuppressWarnings({"unchecked"})
     public <T> T tx() {
         IgniteInternalTx tx = txContext();
 
@@ -845,7 +844,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
      * @param threadId Id of thread for transaction.
      * @return Transaction for thread with given ID.
      */
-    @SuppressWarnings({"unchecked"})
     private <T> T tx(GridCacheContext cctx, long threadId) {
         if (cctx == null || !cctx.systemTx())
             return (T)threadMap.get(threadId);
@@ -866,7 +864,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
      * @param txId Transaction ID.
      * @return Transaction with given ID.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <T extends IgniteInternalTx> T tx(GridCacheVersion txId) {
         return (T)idMap.get(txId);
     }
@@ -875,7 +872,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
      * @param txId Transaction ID.
      * @return Transaction with given ID.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <T extends IgniteInternalTx> T nearTx(GridCacheVersion txId) {
         return (T)nearIdMap.get(txId);
     }
@@ -1771,7 +1767,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
     /**
      * @return Currently committing transaction.
      */
-    @SuppressWarnings({"unchecked"})
     private IgniteInternalTx txContext() {
         return threadCtx.get();
     }
@@ -2332,7 +2327,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
     /**
      * @return Collection of active transaction deadlock detection futures.
      */
-    @SuppressWarnings("unchecked")
     public Collection<IgniteInternalFuture<?>> deadlockDetectionFutures() {
         Collection<? extends IgniteInternalFuture<?>> values = deadlockDetectFuts.values();
 
@@ -2756,7 +2750,6 @@ public class IgniteTxManager extends GridCacheSharedManagerAdapter {
      */
     private class DeadlockDetectionListener implements GridMessageListener {
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void onMessage(UUID nodeId, Object msg, byte plc) {
             GridCacheMessage cacheMsg = (GridCacheMessage)msg;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetection.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetection.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetection.java
index 1cf7809..a904e5b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetection.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetection.java
@@ -220,7 +220,6 @@ public class TxDeadlockDetection {
          * @param topVer Transaction topology version.
          * @param keys Keys.
          */
-        @SuppressWarnings("unchecked")
         private TxDeadlockFuture(GridCacheSharedContext cctx,
             GridCacheVersion txId,
             AffinityTopologyVersion topVer,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
index 0fa2f7e..84dfae1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/version/GridCacheLazyPlainVersionedEntry.java
@@ -98,7 +98,6 @@ public class GridCacheLazyPlainVersionedEntry<K, V> extends GridCachePlainVersio
      * @param keepBinary Flag to keep binary if needed.
      * @return the value corresponding to this entry
      */
-    @SuppressWarnings("unchecked")
     public V value(boolean keepBinary) {
         if (val == null)
             val = (V)cctx.unwrapBinaryIfNeeded(valObj, keepBinary, true);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
index 48c0299..6d0710b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/ClusterProcessor.java
@@ -332,7 +332,6 @@ public class ClusterProcessor extends GridProcessorAdapter {
     /**
      * @param vals collection to seek through.
      */
-    @SuppressWarnings("unchecked")
     private Boolean findLastFlag(Collection<Serializable> vals) {
         Boolean flag = null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousMessage.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousMessage.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousMessage.java
index 5e7cc9d..cdfb2a4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousMessage.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousMessage.java
@@ -118,7 +118,6 @@ public class GridContinuousMessage implements Message {
     /**
      * @return Message data.
      */
-    @SuppressWarnings("unchecked")
     public <T> T data() {
         return msgs != null ? (T)msgs : (T)data;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
index 4569f65..22d6997 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/GridContinuousProcessor.java
@@ -811,7 +811,6 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
      * @param prjPred Projection predicate.
      * @return Future.
      */
-    @SuppressWarnings("TooBroadScope")
     public IgniteInternalFuture<UUID> startRoutine(GridContinuousHandler hnd,
         boolean locOnly,
         int bufSize,
@@ -1712,7 +1711,6 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
 
             if (interval > 0) {
                 IgniteThread checker = new IgniteThread(new GridWorker(ctx.igniteInstanceName(), "continuous-buffer-checker", log) {
-                    @SuppressWarnings("ConstantConditions")
                     @Override protected void body() {
                         long interval0 = interval;
 
@@ -2371,7 +2369,6 @@ public class GridContinuousProcessor extends GridProcessorAdapter {
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
             routineId = U.readUuid(in);
             prjPred = (IgnitePredicate<ClusterNode>)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/StartRequestData.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/StartRequestData.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/StartRequestData.java
index 2314f29..4035cdb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/StartRequestData.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/continuous/StartRequestData.java
@@ -245,7 +245,6 @@ class StartRequestData implements Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         boolean b = in.readBoolean();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
index 4253fb2..76cb899 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastreamer/DataStreamerImpl.java
@@ -1230,7 +1230,6 @@ public class DataStreamerImpl<K, V> implements IgniteDataStreamer<K, V>, Delayed
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     @Override public void flush() throws CacheException {
         lock(true);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
index 92671e0..ea78f6c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java
@@ -181,7 +181,6 @@ public final class DataStructuresProcessor extends GridProcessorAdapter implemen
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void onKernalStart(boolean active) {
         if (ctx.config().isDaemon() || !active)
             return;
@@ -837,7 +836,6 @@ public final class DataStructuresProcessor extends GridProcessorAdapter implemen
      * @return Instance of queue.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public final <T> IgniteQueue<T> queue(final String name, @Nullable final String grpName, int cap,
         @Nullable final CollectionConfiguration cfg)
         throws IgniteCheckedException {
@@ -1550,7 +1548,6 @@ public final class DataStructuresProcessor extends GridProcessorAdapter implemen
      * @return Set instance.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> IgniteSet<T> set(final String name, @Nullable final String grpName, @Nullable final CollectionConfiguration cfg)
         throws IgniteCheckedException {
         A.notNull(name, "name");
@@ -1615,7 +1612,6 @@ public final class DataStructuresProcessor extends GridProcessorAdapter implemen
      * @return Object has casted to expected type.
      * @throws IgniteCheckedException If {@code obj} has different to {@code cls} type.
      */
-    @SuppressWarnings("unchecked")
     @Nullable private <R> R cast(@Nullable Object obj, Class<R> cls) throws IgniteCheckedException {
         if (obj == null)
             return null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceValue.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceValue.java
index b3a2243..32b8b31 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceValue.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicReferenceValue.java
@@ -75,7 +75,6 @@ public final class GridCacheAtomicReferenceValue<T> extends AtomicDataStructureV
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings( {"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         val = (T)in.readObject();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedValue.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedValue.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedValue.java
index 89f83c1..a328fb1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedValue.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheAtomicStampedValue.java
@@ -100,7 +100,6 @@ public final class GridCacheAtomicStampedValue<T, S> extends AtomicDataStructure
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings( {"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         val = (T)in.readObject();
         stamp = (S)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java
index 7662acf..8453080 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/GridCacheCountDownLatchImpl.java
@@ -309,7 +309,6 @@ public final class GridCacheCountDownLatchImpl extends AtomicDataStructureProxy<
      * @return Reconstructed object.
      * @throws ObjectStreamException Thrown in case of unmarshalling error.
      */
-    @SuppressWarnings({"ConstantConditions"})
     private Object readResolve() throws ObjectStreamException {
         try {
             IgniteBiTuple<GridKernalContext, String> t = stash.get();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractOutputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractOutputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractOutputStream.java
index c1e751e..463fb64 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractOutputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractOutputStream.java
@@ -110,7 +110,6 @@ abstract class IgfsAbstractOutputStream extends IgfsOutputStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
     @Override public void write(byte[] b, int off, int len) throws IOException {
         A.notNull(b, "b");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
index 5f8f314..9184f5e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsDataManager.java
@@ -1497,7 +1497,6 @@ public class IgfsDataManager extends IgfsManager {
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("ConstantConditions")
         @Override protected void body() throws InterruptedException, IgniteInterruptedCheckedException {
             try {
                 while (!isCancelled()) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
index bac536d..5931d40 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsImpl.java
@@ -414,7 +414,6 @@ public final class IgfsImpl implements IgfsEx {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("ConstantConditions")
     @Override public IgfsStatus globalSpace() {
         return safeOp(new Callable<IgfsStatus>() {
             @Override public IgfsStatus call() throws Exception {
@@ -765,7 +764,6 @@ public final class IgfsImpl implements IgfsEx {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public Collection<IgfsPath> listPaths(final IgfsPath path) {
         A.notNull(path, "path");
 
@@ -1554,7 +1552,6 @@ public final class IgfsImpl implements IgfsEx {
      * @param arg Optional task argument.
      * @return Execution future.
      */
-    @SuppressWarnings("unchecked")
     <T, R> IgniteInternalFuture<R> executeAsync0(Class<? extends IgfsTask<T, R>> taskCls,
         @Nullable IgfsRecordResolver rslvr, Collection<IgfsPath> paths, boolean skipNonExistentFiles,
         long maxRangeLen, @Nullable T arg) {
@@ -1790,7 +1787,6 @@ public final class IgfsImpl implements IgfsEx {
     /**
      * IGFS thread factory.
      */
-    @SuppressWarnings("NullableProblems")
     private static class IgfsThreadFactory implements ThreadFactory {
         /** IGFS name. */
         private final String name;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
index 40352aa..a24f8dc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/igfs/IgfsInputStreamImpl.java
@@ -59,7 +59,6 @@ public class IgfsInputStreamImpl extends IgfsInputStream implements IgfsSecondar
     private final IgfsContext igfsCtx;
 
     /** Secondary file system reader. */
-    @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
     private final IgfsSecondaryFileSystemPositionedReadable secReader;
 
     /** Logger. */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientResourceRegistry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientResourceRegistry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientResourceRegistry.java
index 0ac3368..faa0e7f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientResourceRegistry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/client/ClientResourceRegistry.java
@@ -52,7 +52,6 @@ public class ClientResourceRegistry {
      * @param <T> Object type.
      * @return Object.
      */
-    @SuppressWarnings("unchecked")
     public <T> T get(long hnd) {
         Object obj = res.get(hnd);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
index fbf8191..c2303ac 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetCacheStore.java
@@ -270,7 +270,6 @@ public class PlatformDotNetCacheStore<K, V> implements CacheStore<K, V>, Platfor
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void writeAll(final Collection<Cache.Entry<? extends K, ? extends V>> entries) {
         assert entries != null;
         try {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
index 05ee693..89ad088 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/dotnet/PlatformDotNetConfigurationClosure.java
@@ -75,7 +75,6 @@ public class PlatformDotNetConfigurationClosure extends PlatformAbstractConfigur
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("deprecation")
     @Override protected void apply0(IgniteConfiguration igniteCfg) {
         // Validate and copy Interop configuration setting environment pointer along the way.
         PlatformConfiguration interopCfg = igniteCfg.getPlatformConfiguration();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/events/PlatformEvents.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/events/PlatformEvents.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/events/PlatformEvents.java
index bd22298..218b112 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/events/PlatformEvents.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/events/PlatformEvents.java
@@ -443,19 +443,17 @@ public class PlatformEvents extends PlatformAbstractTarget {
         }
 
         /** <inheritDoc /> */
-        @SuppressWarnings("unchecked")
         @Override public void write(BinaryRawWriterEx writer, Object obj, Throwable err) {
-            Collection<Event> events = (Collection<Event>)obj;
+            Collection<Event> evts = (Collection<Event>)obj;
 
             if (obj != null) {
-                writer.writeInt(events.size());
+                writer.writeInt(evts.size());
 
-                for (Event e : events)
+                for (Event e : evts)
                     platformCtx.writeEvent(writer, e);
             }
-            else {
+            else
                 writer.writeInt(-1);
-            }
         }
 
         /** <inheritDoc /> */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
index bfd31b6..6b34149 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/platform/utils/PlatformUtils.java
@@ -81,7 +81,6 @@ import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_PREFIX;
 /**
  * Platform utility methods.
  */
-@SuppressWarnings({"unchecked"})
 public class PlatformUtils {
     /** Node attribute: platform. */
     public static final String ATTR_PLATFORM = ATTR_PREFIX  + ".platform";

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java
index 556bb26..abab9d6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/CachePluginManager.java
@@ -109,7 +109,6 @@ public class CachePluginManager extends GridCacheManagerAdapter {
      * @param cls Component class.
      * @return Created component.
      */
-    @SuppressWarnings("unchecked")
     public <T> T createComponent(Class<T> cls) {
         for (CachePluginProvider provider : providersList) {
             T res = (T)provider.createComponent(cls);
@@ -146,7 +145,7 @@ public class CachePluginManager extends GridCacheManagerAdapter {
      * @param <V> Value type.
      * @return New instance of underlying type or {@code null} if it's not available.
      */
-    @SuppressWarnings({"unchecked", "ForLoopReplaceableByForEach"})
+    @SuppressWarnings({"ForLoopReplaceableByForEach"})
     @Nullable public <T, K, V> T unwrapCacheEntry(Cache.Entry<K, V> entry, Class<T> cls) {
         for (int i = 0; i < providersList.size(); i++) {
             final T res = (T)providersList.get(i).unwrapCacheEntry(entry, cls);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
index c1e542d..6e82a0d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/plugin/IgnitePluginProcessor.java
@@ -108,7 +108,6 @@ public class IgnitePluginProcessor extends GridProcessorAdapter {
      * @param name Plugin name.
      * @return Plugin provider.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T extends PluginProvider> T pluginProvider(String name) {
         return (T)plugins.get(name);
     }
@@ -124,7 +123,6 @@ public class IgnitePluginProcessor extends GridProcessorAdapter {
      * @param provider Plugin context.
      * @return Plugin context.
      */
-    @SuppressWarnings("unchecked")
     public <T extends PluginContext> T pluginContextForProvider(PluginProvider provider) {
         return (T)pluginCtxMap.get(provider);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryCacheObjectsIterator.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryCacheObjectsIterator.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryCacheObjectsIterator.java
index b0e1562..08934e9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryCacheObjectsIterator.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryCacheObjectsIterator.java
@@ -62,7 +62,6 @@ public class GridQueryCacheObjectsIterator implements Iterator<List<?>>, AutoClo
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public List<?> next() {
         return ((List<?>)CacheObjectUtils.unwrapBinariesIfNeeded(
             cacheObjValCtx, (Collection<Object>)iter.next(), keepBinary));

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index eee21e2..bf2f943 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -336,7 +336,6 @@ public class GridQueryProcessor extends GridProcessorAdapter {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void onGridDataReceived(DiscoveryDataBag.GridDiscoveryData data) {
         synchronized (stateMux) {
             // Preserve proposals.

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryKeyValueIterator.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryKeyValueIterator.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryKeyValueIterator.java
index 02dde9d..af984cd 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryKeyValueIterator.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryKeyValueIterator.java
@@ -46,7 +46,6 @@ public class QueryKeyValueIterator<K, V> implements Iterator<Cache.Entry<K, V>>
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public Cache.Entry<K, V> next() {
         try {
             List<?> row = iter.next();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
index 722205b..865c5df 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
@@ -205,7 +205,6 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T value(String field, Object key, Object val) throws IgniteCheckedException {
         assert field != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/query/property/QueryBinaryProperty.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/property/QueryBinaryProperty.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/property/QueryBinaryProperty.java
index 3f2d233..0405057 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/property/QueryBinaryProperty.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/property/QueryBinaryProperty.java
@@ -213,7 +213,6 @@ public class QueryBinaryProperty implements GridQueryProperty {
      * @param <T> Value type.
      */
     private <T> void setValue0(BinaryObjectBuilder builder, String field, Object val, Class<T> valType) {
-        //noinspection unchecked
         builder.setField(field, (T)val, valType);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientTaskResultBean.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientTaskResultBean.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientTaskResultBean.java
index dc2a953..8329276 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientTaskResultBean.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/client/message/GridClientTaskResultBean.java
@@ -73,7 +73,6 @@ public class GridClientTaskResultBean implements Externalizable {
     /**
      * @return Task result.
      */
-    @SuppressWarnings("unchecked")
     public <R> R getResult() {
         return (R)res;
     }


[18/52] [abbrv] ignite git commit: SqlQueryFullScanBenchmark config fixed

Posted by sb...@apache.org.
SqlQueryFullScanBenchmark config fixed


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/32f564cf
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/32f564cf
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/32f564cf

Branch: refs/heads/ignite-627
Commit: 32f564cf4847b9b7493f74b946f9c65ba73bb0c2
Parents: b4bfd4c
Author: Sergi Vladykin <se...@gmail.com>
Authored: Tue Dec 18 15:30:31 2018 +0300
Committer: Sergi Vladykin <se...@gmail.com>
Committed: Tue Dec 18 15:30:31 2018 +0300

----------------------------------------------------------------------
 modules/yardstick/config/ignite-base-config.xml | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/32f564cf/modules/yardstick/config/ignite-base-config.xml
----------------------------------------------------------------------
diff --git a/modules/yardstick/config/ignite-base-config.xml b/modules/yardstick/config/ignite-base-config.xml
index 6db8b6e..99f2460 100644
--- a/modules/yardstick/config/ignite-base-config.xml
+++ b/modules/yardstick/config/ignite-base-config.xml
@@ -127,6 +127,9 @@
                             <value>org.apache.ignite.yardstick.cache.model.Person</value>
 
                             <value>java.lang.Integer</value>
+                            <value>org.apache.ignite.yardstick.cache.model.PersonNoIndex</value>
+
+                            <value>java.lang.Integer</value>
                             <value>org.apache.ignite.yardstick.cache.model.SampleValue</value>
 
                             <value>java.lang.Integer</value>


[37/52] [abbrv] ignite git commit: IGNITE-9839 Web Console: update to RxJS 6.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/store/effects.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/store/effects.js b/modules/web-console/frontend/app/components/page-configure/store/effects.js
index 014076b..ac807dc 100644
--- a/modules/web-console/frontend/app/components/page-configure/store/effects.js
+++ b/modules/web-console/frontend/app/components/page-configure/store/effects.js
@@ -15,23 +15,8 @@
  * limitations under the License.
  */
 
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/operator/ignoreElements';
-import 'rxjs/add/operator/let';
-import 'rxjs/add/operator/exhaustMap';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/pluck';
-import 'rxjs/add/operator/withLatestFrom';
-import 'rxjs/add/operator/merge';
-import 'rxjs/add/operator/take';
-import 'rxjs/add/operator/catch';
-import 'rxjs/add/operator/zip';
-import {merge} from 'rxjs/observable/merge';
-import {empty} from 'rxjs/observable/empty';
-import {of} from 'rxjs/observable/of';
-import {from} from 'rxjs/observable/from';
-import {fromPromise} from 'rxjs/observable/fromPromise';
+import {merge, empty, of, from} from 'rxjs';
+import {mapTo, filter, tap, ignoreElements, exhaustMap, switchMap, map, pluck, withLatestFrom, take, catchError, zip} from 'rxjs/operators';
 import uniq from 'lodash/uniq';
 import {uniqueName} from 'app/utils/uniqueName';
 import {defaultNames} from '../defaultNames';
@@ -81,7 +66,7 @@ import Models from 'app/services/Models';
 import IGFSs from 'app/services/IGFSs';
 import {Confirm} from 'app/services/Confirm.service';
 
-export const ofType = (type) => (s) => s.filter((a) => a.type === type);
+export const ofType = (type) => (s) => s.pipe(filter((a) => a.type === type));
 
 export default class ConfigEffects {
     static $inject = [
@@ -124,35 +109,37 @@ export default class ConfigEffects {
         this.Confirm = Confirm;
         this.configurationDownload = ConfigurationDownload;
 
-        this.loadConfigurationEffect$ = this.ConfigureState.actions$
-            .let(ofType('LOAD_COMPLETE_CONFIGURATION'))
-            .exhaustMap((action) => {
-                return fromPromise(this.Clusters.getConfiguration(action.clusterID))
-                    .switchMap(({data}) => of(
+        this.loadConfigurationEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('LOAD_COMPLETE_CONFIGURATION'),
+            exhaustMap((action) => {
+                return from(this.Clusters.getConfiguration(action.clusterID)).pipe(
+                    switchMap(({data}) => of(
                         completeConfiguration(data),
                         {type: 'LOAD_COMPLETE_CONFIGURATION_OK', data}
-                    ))
-                    .catch((error) => of({
+                    )),
+                    catchError((error) => of({
                         type: 'LOAD_COMPLETE_CONFIGURATION_ERR',
                         error: {
                             message: `Failed to load cluster configuration: ${error.data}.`
                         },
                         action
-                    }));
-            });
+                    })));
+            })
+        );
 
-        this.storeConfigurationEffect$ = this.ConfigureState.actions$
-            .let(ofType(COMPLETE_CONFIGURATION))
-            .exhaustMap(({configuration: {cluster, caches, models, igfss}}) => of(...[
+        this.storeConfigurationEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(COMPLETE_CONFIGURATION),
+            exhaustMap(({configuration: {cluster, caches, models, igfss}}) => of(...[
                 cluster && {type: clustersActionTypes.UPSERT, items: [cluster]},
                 caches && caches.length && {type: cachesActionTypes.UPSERT, items: caches},
                 models && models.length && {type: modelsActionTypes.UPSERT, items: models},
                 igfss && igfss.length && {type: igfssActionTypes.UPSERT, items: igfss}
-            ].filter((v) => v)));
+            ].filter((v) => v)))
+        );
 
-        this.saveCompleteConfigurationEffect$ = this.ConfigureState.actions$
-            .let(ofType(ADVANCED_SAVE_COMPLETE_CONFIGURATION))
-            .switchMap((action) => {
+        this.saveCompleteConfigurationEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(ADVANCED_SAVE_COMPLETE_CONFIGURATION),
+            switchMap((action) => {
                 const actions = [
                     {
                         type: modelsActionTypes.UPSERT,
@@ -188,62 +175,68 @@ export default class ConfigEffects {
                     }
                 ].filter((a) => a.items.length);
 
-                return of(...actions)
-                .merge(
-                    fromPromise(Clusters.saveAdvanced(action.changedItems))
-                    .switchMap((res) => {
-                        return of(
-                            {type: 'EDIT_CLUSTER', cluster: action.changedItems.cluster},
-                            {type: 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK', changedItems: action.changedItems}
-                        );
-                    })
-                    .catch((res) => {
-                        return of({
-                            type: 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_ERR',
-                            changedItems: action.changedItems,
-                            action,
-                            error: {
-                                message: `Failed to save cluster "${action.changedItems.cluster.name}": ${res.data}.`
-                            }
-                        }, {
-                            type: 'UNDO_ACTIONS',
-                            actions
-                        });
-                    })
+                return merge(
+                    of(...actions),
+                    from(Clusters.saveAdvanced(action.changedItems)).pipe(
+                        switchMap((res) => {
+                            return of(
+                                {type: 'EDIT_CLUSTER', cluster: action.changedItems.cluster},
+                                {type: 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK', changedItems: action.changedItems}
+                            );
+                        }),
+                        catchError((res) => {
+                            return of({
+                                type: 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_ERR',
+                                changedItems: action.changedItems,
+                                action,
+                                error: {
+                                    message: `Failed to save cluster "${action.changedItems.cluster.name}": ${res.data}.`
+                                }
+                            }, {
+                                type: 'UNDO_ACTIONS',
+                                actions
+                            });
+                        })
+                    )
                 );
-            });
-
-        this.addCacheToEditEffect$ = this.ConfigureState.actions$
-            .let(ofType('ADD_CACHE_TO_EDIT'))
-            .switchMap(() => this.ConfigureState.state$.let(this.ConfigSelectors.selectCacheToEdit('new')).take(1))
-            .map((cache) => ({type: 'UPSERT_CLUSTER_ITEM', itemType: 'caches', item: cache}));
-
-        this.errorNotificationsEffect$ = this.ConfigureState.actions$
-            .filter((a) => a.error)
-            .do((action) => this.IgniteMessages.showError(action.error))
-            .ignoreElements();
-
-        this.loadUserClustersEffect$ = this.ConfigureState.actions$
-            .let(ofType('LOAD_USER_CLUSTERS'))
-            .exhaustMap((a) => {
-                return fromPromise(this.Clusters.getClustersOverview())
-                    .switchMap(({data}) => of(
+            })
+        );
+
+        this.addCacheToEditEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('ADD_CACHE_TO_EDIT'),
+            switchMap(() => this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCacheToEdit('new'), take(1))),
+            map((cache) => ({type: 'UPSERT_CLUSTER_ITEM', itemType: 'caches', item: cache}))
+        );
+
+        this.errorNotificationsEffect$ = this.ConfigureState.actions$.pipe(
+            filter((a) => a.error),
+            tap((action) => this.IgniteMessages.showError(action.error)),
+            ignoreElements()
+        );
+
+        this.loadUserClustersEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('LOAD_USER_CLUSTERS'),
+            exhaustMap((a) => {
+                return from(this.Clusters.getClustersOverview()).pipe(
+                    switchMap(({data}) => of(
                         {type: shortClustersActionTypes.SET, items: data},
                         {type: `${a.type}_OK`}
-                    ))
-                    .catch((error) => of({
+                    )),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load clusters: ${error.data}`
                         },
                         action: a
-                    }));
-            });
+                    }))
+                );
+            })
+        );
 
-        this.loadAndEditClusterEffect$ = ConfigureState.actions$
-            .let(ofType('LOAD_AND_EDIT_CLUSTER'))
-            .withLatestFrom(this.ConfigureState.state$.let(this.ConfigSelectors.selectShortClustersValue()))
-            .exhaustMap(([a, shortClusters]) => {
+        this.loadAndEditClusterEffect$ = ConfigureState.actions$.pipe(
+            ofType('LOAD_AND_EDIT_CLUSTER'),
+            withLatestFrom(this.ConfigureState.state$.pipe(this.ConfigSelectors.selectShortClustersValue())),
+            exhaustMap(([a, shortClusters]) => {
                 if (a.clusterID === 'new') {
                     return of(
                         {
@@ -256,226 +249,268 @@ export default class ConfigEffects {
                         {type: 'LOAD_AND_EDIT_CLUSTER_OK'}
                     );
                 }
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectCluster(a.clusterID)).take(1)
-                    .switchMap((cluster) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectCluster(a.clusterID),
+                    take(1),
+                    switchMap((cluster) => {
                         if (cluster) {
                             return of(
                                 {type: 'EDIT_CLUSTER', cluster},
                                 {type: 'LOAD_AND_EDIT_CLUSTER_OK'}
                             );
                         }
-                        return from(this.Clusters.getCluster(a.clusterID))
-                            .switchMap(({data}) => of(
+                        return from(this.Clusters.getCluster(a.clusterID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: clustersActionTypes.UPSERT, items: [data]},
                                 {type: 'EDIT_CLUSTER', cluster: data},
                                 {type: 'LOAD_AND_EDIT_CLUSTER_OK'}
-                            ))
-                            .catch((error) => of({
+                            )),
+                            catchError((error) => of({
                                 type: 'LOAD_AND_EDIT_CLUSTER_ERR',
                                 error: {
                                     message: `Failed to load cluster: ${error.data}.`
                                 }
-                            }));
-                    });
-            });
-
-        this.loadCacheEffect$ = this.ConfigureState.actions$
-            .let(ofType('LOAD_CACHE'))
-            .exhaustMap((a) => {
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectCache(a.cacheID)).take(1)
-                    .switchMap((cache) => {
+                            }))
+                        );
+                    })
+                );
+            })
+        );
+
+        this.loadCacheEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('LOAD_CACHE'),
+            exhaustMap((a) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectCache(a.cacheID),
+                    take(1),
+                    switchMap((cache) => {
                         if (cache)
                             return of({type: `${a.type}_OK`, cache});
 
-                        return fromPromise(this.Caches.getCache(a.cacheID))
-                            .switchMap(({data}) => of(
+                        return from(this.Caches.getCache(a.cacheID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: 'CACHE', cache: data},
                                 {type: `${a.type}_OK`, cache: data}
-                            ));
-                    })
-                    .catch((error) => of({
+                            ))
+                        );
+                    }),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load cache: ${error.data}.`
                         }
-                    }));
-            });
+                    }))
+                );
+            })
+        );
 
-        this.storeCacheEffect$ = this.ConfigureState.actions$
-            .let(ofType('CACHE'))
-            .map((a) => ({type: cachesActionTypes.UPSERT, items: [a.cache]}));
+        this.storeCacheEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('CACHE'),
+            map((a) => ({type: cachesActionTypes.UPSERT, items: [a.cache]}))
+        );
 
-        this.loadShortCachesEffect$ = ConfigureState.actions$
-            .let(ofType('LOAD_SHORT_CACHES'))
-            .exhaustMap((a) => {
+        this.loadShortCachesEffect$ = ConfigureState.actions$.pipe(
+            ofType('LOAD_SHORT_CACHES'),
+            exhaustMap((a) => {
                 if (!(a.ids || []).length)
                     return of({type: `${a.type}_OK`});
 
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectShortCaches()).take(1)
-                    .switchMap((items) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectShortCaches(),
+                    take(1),
+                    switchMap((items) => {
                         if (!items.pristine && a.ids && a.ids.every((_id) => items.value.has(_id)))
                             return of({type: `${a.type}_OK`});
 
-                        return fromPromise(this.Clusters.getClusterCaches(a.clusterID))
-                            .switchMap(({data}) => of(
+                        return from(this.Clusters.getClusterCaches(a.clusterID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: shortCachesActionTypes.UPSERT, items: data},
                                 {type: `${a.type}_OK`}
-                            ));
-                    })
-                    .catch((error) => of({
+                            ))
+                        );
+                    }),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load caches: ${error.data}.`
                         },
                         action: a
-                    }));
-            });
-
-        this.loadIgfsEffect$ = this.ConfigureState.actions$
-            .let(ofType('LOAD_IGFS'))
-            .exhaustMap((a) => {
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectIGFS(a.igfsID)).take(1)
-                    .switchMap((igfs) => {
+                    }))
+                );
+            })
+        );
+
+        this.loadIgfsEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('LOAD_IGFS'),
+            exhaustMap((a) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectIGFS(a.igfsID),
+                    take(1),
+                    switchMap((igfs) => {
                         if (igfs)
                             return of({type: `${a.type}_OK`, igfs});
 
-                        return fromPromise(this.IGFSs.getIGFS(a.igfsID))
-                            .switchMap(({data}) => of(
+                        return from(this.IGFSs.getIGFS(a.igfsID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: 'IGFS', igfs: data},
                                 {type: `${a.type}_OK`, igfs: data}
-                            ));
-                    })
-                    .catch((error) => of({
+                            ))
+                        );
+                    }),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load IGFS: ${error.data}.`
                         }
-                    }));
-            });
+                    }))
+                );
+            })
+        );
 
-        this.storeIgfsEffect$ = this.ConfigureState.actions$
-            .let(ofType('IGFS'))
-            .map((a) => ({type: igfssActionTypes.UPSERT, items: [a.igfs]}));
+        this.storeIgfsEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('IGFS'),
+            map((a) => ({type: igfssActionTypes.UPSERT, items: [a.igfs]}))
+        );
 
-        this.loadShortIgfssEffect$ = ConfigureState.actions$
-            .let(ofType('LOAD_SHORT_IGFSS'))
-            .exhaustMap((a) => {
+        this.loadShortIgfssEffect$ = ConfigureState.actions$.pipe(
+            ofType('LOAD_SHORT_IGFSS'),
+            exhaustMap((a) => {
                 if (!(a.ids || []).length) {
                     return of(
                         {type: shortIGFSsActionTypes.UPSERT, items: []},
                         {type: `${a.type}_OK`}
                     );
                 }
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectShortIGFSs()).take(1)
-                    .switchMap((items) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectShortIGFSs(),
+                    take(1),
+                    switchMap((items) => {
                         if (!items.pristine && a.ids && a.ids.every((_id) => items.value.has(_id)))
                             return of({type: `${a.type}_OK`});
 
-                        return fromPromise(this.Clusters.getClusterIGFSs(a.clusterID))
-                            .switchMap(({data}) => of(
+                        return from(this.Clusters.getClusterIGFSs(a.clusterID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: shortIGFSsActionTypes.UPSERT, items: data},
                                 {type: `${a.type}_OK`}
-                            ));
-                    })
-                    .catch((error) => of({
+                            ))
+                        );
+                    }),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load IGFSs: ${error.data}.`
                         },
                         action: a
-                    }));
-            });
-
-        this.loadModelEffect$ = this.ConfigureState.actions$
-            .let(ofType('LOAD_MODEL'))
-            .exhaustMap((a) => {
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectModel(a.modelID)).take(1)
-                    .switchMap((model) => {
+                    }))
+                );
+            })
+        );
+
+        this.loadModelEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('LOAD_MODEL'),
+            exhaustMap((a) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectModel(a.modelID),
+                    take(1),
+                    switchMap((model) => {
                         if (model)
                             return of({type: `${a.type}_OK`, model});
 
-                        return fromPromise(this.Models.getModel(a.modelID))
-                            .switchMap(({data}) => of(
+                        return from(this.Models.getModel(a.modelID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: 'MODEL', model: data},
                                 {type: `${a.type}_OK`, model: data}
-                            ));
-                    })
-                    .catch((error) => of({
+                            ))
+                        );
+                    }),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load domain model: ${error.data}.`
                         }
-                    }));
-            });
+                    }))
+                );
+            })
+        );
 
-        this.storeModelEffect$ = this.ConfigureState.actions$
-            .let(ofType('MODEL'))
-            .map((a) => ({type: modelsActionTypes.UPSERT, items: [a.model]}));
+        this.storeModelEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('MODEL'),
+            map((a) => ({type: modelsActionTypes.UPSERT, items: [a.model]}))
+        );
 
-        this.loadShortModelsEffect$ = this.ConfigureState.actions$
-            .let(ofType('LOAD_SHORT_MODELS'))
-            .exhaustMap((a) => {
+        this.loadShortModelsEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('LOAD_SHORT_MODELS'),
+            exhaustMap((a) => {
                 if (!(a.ids || []).length) {
                     return of(
                         {type: shortModelsActionTypes.UPSERT, items: []},
                         {type: `${a.type}_OK`}
                     );
                 }
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectShortModels()).take(1)
-                    .switchMap((items) => {
+                return this.ConfigureState.state$.pipe(
+                    this.ConfigSelectors.selectShortModels(),
+                    take(1),
+                    switchMap((items) => {
                         if (!items.pristine && a.ids && a.ids.every((_id) => items.value.has(_id)))
                             return of({type: `${a.type}_OK`});
 
-                        return fromPromise(this.Clusters.getClusterModels(a.clusterID))
-                            .switchMap(({data}) => of(
+                        return from(this.Clusters.getClusterModels(a.clusterID)).pipe(
+                            switchMap(({data}) => of(
                                 {type: shortModelsActionTypes.UPSERT, items: data},
                                 {type: `${a.type}_OK`}
-                            ));
-                    })
-                    .catch((error) => of({
+                            ))
+                        );
+                    }),
+                    catchError((error) => of({
                         type: `${a.type}_ERR`,
                         error: {
                             message: `Failed to load domain models: ${error.data}.`
                         },
                         action: a
-                    }));
-            });
-
-        this.basicSaveRedirectEffect$ = this.ConfigureState.actions$
-            .let(ofType(BASIC_SAVE_OK))
-            .do((a) => this.$state.go('base.configuration.edit.basic', {clusterID: a.changedItems.cluster._id}, {location: 'replace', custom: {justIDUpdate: true}}))
-            .ignoreElements();
-
-        this.basicDownloadAfterSaveEffect$ = this.ConfigureState.actions$.let(ofType(BASIC_SAVE_AND_DOWNLOAD))
-            .zip(this.ConfigureState.actions$.let(ofType(BASIC_SAVE_OK)))
-            .pluck('1')
-            .do((a) => this.configurationDownload.downloadClusterConfiguration(a.changedItems.cluster))
-            .ignoreElements();
+                    }))
+                );
+            })
+        );
+
+        this.basicSaveRedirectEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(BASIC_SAVE_OK),
+            tap((a) => this.$state.go('base.configuration.edit.basic', {clusterID: a.changedItems.cluster._id}, {location: 'replace', custom: {justIDUpdate: true}})),
+            ignoreElements()
+        );
+
+        this.basicDownloadAfterSaveEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(BASIC_SAVE_AND_DOWNLOAD),
+            zip(this.ConfigureState.actions$.pipe(ofType(BASIC_SAVE_OK))),
+            pluck('1'),
+            tap((a) => this.configurationDownload.downloadClusterConfiguration(a.changedItems.cluster)),
+            ignoreElements()
+        );
 
         this.advancedDownloadAfterSaveEffect$ = merge(
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_CLUSTER)),
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_CACHE)),
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_IGFS)),
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_MODEL)),
-        )
-            .filter((a) => a.download)
-            .zip(this.ConfigureState.actions$.let(ofType('ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK')))
-            .pluck('1')
-            .do((a) => this.configurationDownload.downloadClusterConfiguration(a.changedItems.cluster))
-            .ignoreElements();
-
-        this.advancedSaveRedirectEffect$ = this.ConfigureState.actions$
-            .let(ofType('ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK'))
-            .withLatestFrom(this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_COMPLETE_CONFIGURATION)))
-            .pluck('1', 'changedItems')
-            .map((req) => {
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_CLUSTER)),
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_CACHE)),
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_IGFS)),
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_MODEL)),
+        ).pipe(
+            filter((a) => a.download),
+            zip(this.ConfigureState.actions$.pipe(ofType('ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK'))),
+            pluck('1'),
+            tap((a) => this.configurationDownload.downloadClusterConfiguration(a.changedItems.cluster)),
+            ignoreElements()
+        );
+
+        this.advancedSaveRedirectEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK'),
+            withLatestFrom(this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_COMPLETE_CONFIGURATION))),
+            pluck('1', 'changedItems'),
+            map((req) => {
                 const firstChangedItem = Object.keys(req).filter((k) => k !== 'cluster')
                     .map((k) => Array.isArray(req[k]) ? [k, req[k][0]] : [k, req[k]])
                     .filter((v) => v[1])
                     .pop();
                 return firstChangedItem ? [...firstChangedItem, req.cluster] : ['cluster', req.cluster, req.cluster];
-            })
-            .do(([type, value, cluster]) => {
+            }),
+            tap(([type, value, cluster]) => {
                 const go = (state, params = {}) => this.$state.go(
                     state, {...params, clusterID: cluster._id}, {location: 'replace', custom: {justIDUpdate: true}}
                 );
@@ -523,66 +558,76 @@ export default class ConfigEffects {
 
                     default: break;
                 }
-            })
-            .ignoreElements();
+            }),
+            ignoreElements()
+        );
 
-        this.removeClusterItemsEffect$ = this.ConfigureState.actions$
-            .let(ofType(REMOVE_CLUSTER_ITEMS))
-            .exhaustMap((a) => {
+        this.removeClusterItemsEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(REMOVE_CLUSTER_ITEMS),
+            exhaustMap((a) => {
                 return a.confirm
                     // TODO: list items to remove in confirmation
-                    ? fromPromise(this.Confirm.confirm('Are you sure you want to remove these items?'))
-                        .mapTo(a)
-                        .catch(() => empty())
+                    ? from(this.Confirm.confirm('Are you sure you want to remove these items?')).pipe(
+                        mapTo(a),
+                        catchError(() => empty())
+                    )
                     : of(a);
-            })
-            .map((a) => removeClusterItemsConfirmed(a.clusterID, a.itemType, a.itemIDs));
-
-        this.persistRemovedClusterItemsEffect$ = this.ConfigureState.actions$
-            .let(ofType(REMOVE_CLUSTER_ITEMS_CONFIRMED))
-            .withLatestFrom(this.ConfigureState.actions$.let(ofType(REMOVE_CLUSTER_ITEMS)))
-            .filter(([a, b]) => {
+            }),
+            map((a) => removeClusterItemsConfirmed(a.clusterID, a.itemType, a.itemIDs))
+        );
+
+        this.persistRemovedClusterItemsEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(REMOVE_CLUSTER_ITEMS_CONFIRMED),
+            withLatestFrom(this.ConfigureState.actions$.pipe(ofType(REMOVE_CLUSTER_ITEMS))),
+            filter(([a, b]) => {
                 return a.itemType === b.itemType
                     && b.save
                     && JSON.stringify(a.itemIDs) === JSON.stringify(b.itemIDs);
-            })
-            .pluck('0')
-            .withLatestFrom(this.ConfigureState.state$.pluck('edit'))
-            .map(([action, edit]) => advancedSaveCompleteConfiguration(edit));
-
-        this.confirmClustersRemovalEffect$ = this.ConfigureState.actions$
-            .let(ofType(CONFIRM_CLUSTERS_REMOVAL))
-            .pluck('clusterIDs')
-            .switchMap((ids) => this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterNames(ids)).take(1))
-            .exhaustMap((names) => {
-                return fromPromise(this.Confirm.confirm(`
+            }),
+            pluck('0'),
+            withLatestFrom(this.ConfigureState.state$.pipe(pluck('edit'))),
+            map(([action, edit]) => advancedSaveCompleteConfiguration(edit))
+        );
+
+        this.confirmClustersRemovalEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(CONFIRM_CLUSTERS_REMOVAL),
+            pluck('clusterIDs'),
+            switchMap((ids) => this.ConfigureState.state$.pipe(
+                this.ConfigSelectors.selectClusterNames(ids),
+                take(1)
+            )),
+            exhaustMap((names) => {
+                return from(this.Confirm.confirm(`
                     <p>Are you sure you want to remove these clusters?</p>
                     <ul>${names.map((name) => `<li>${name}</li>`).join('')}</ul>
-                `))
-                .map(confirmClustersRemovalOK)
-                .catch(() => Observable.empty());
-            });
-
-        this.persistRemovedClustersLocallyEffect$ = this.ConfigureState.actions$
-            .let(ofType(CONFIRM_CLUSTERS_REMOVAL_OK))
-            .withLatestFrom(this.ConfigureState.actions$.let(ofType(CONFIRM_CLUSTERS_REMOVAL)))
-            .switchMap(([, {clusterIDs}]) => of(
+                `)).pipe(
+                    map(confirmClustersRemovalOK),
+                    catchError(() => empty())
+                );
+            })
+        );
+
+        this.persistRemovedClustersLocallyEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(CONFIRM_CLUSTERS_REMOVAL_OK),
+            withLatestFrom(this.ConfigureState.actions$.pipe(ofType(CONFIRM_CLUSTERS_REMOVAL))),
+            switchMap(([, {clusterIDs}]) => of(
                 {type: shortClustersActionTypes.REMOVE, ids: clusterIDs},
                 {type: clustersActionTypes.REMOVE, ids: clusterIDs}
-            ));
-
-        this.persistRemovedClustersRemotelyEffect$ = this.ConfigureState.actions$
-            .let(ofType(CONFIRM_CLUSTERS_REMOVAL_OK))
-            .withLatestFrom(
-                this.ConfigureState.actions$.let(ofType(CONFIRM_CLUSTERS_REMOVAL)),
-                this.ConfigureState.actions$.let(ofType(shortClustersActionTypes.REMOVE)),
-                this.ConfigureState.actions$.let(ofType(clustersActionTypes.REMOVE))
-            )
-            .switchMap(([, {clusterIDs}, ...backup]) => this.Clusters.removeCluster$(clusterIDs)
-                .mapTo({
+            ))
+        );
+
+        this.persistRemovedClustersRemotelyEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(CONFIRM_CLUSTERS_REMOVAL_OK),
+            withLatestFrom(
+                this.ConfigureState.actions$.pipe(ofType(CONFIRM_CLUSTERS_REMOVAL)),
+                this.ConfigureState.actions$.pipe(ofType(shortClustersActionTypes.REMOVE)),
+                this.ConfigureState.actions$.pipe(ofType(clustersActionTypes.REMOVE))
+            ),
+            switchMap(([, {clusterIDs}, ...backup]) => this.Clusters.removeCluster$(clusterIDs).pipe(
+                mapTo({
                     type: 'REMOVE_CLUSTERS_OK'
-                })
-                .catch((e) => of(
+                }),
+                catchError((e) => of(
                     {
                         type: 'REMOVE_CLUSTERS_ERR',
                         error: {
@@ -594,13 +639,15 @@ export default class ConfigEffects {
                         actions: backup
                     }
                 ))
-            );
+            ))
+        );
 
-        this.notifyRemoteClustersRemoveSuccessEffect$ = this.ConfigureState.actions$
-            .let(ofType('REMOVE_CLUSTERS_OK'))
-            .withLatestFrom(this.ConfigureState.actions$.let(ofType(CONFIRM_CLUSTERS_REMOVAL)))
-            .do(([, {clusterIDs}]) => this.IgniteMessages.showInfo(`Cluster(s) removed: ${clusterIDs.length}`))
-            .ignoreElements();
+        this.notifyRemoteClustersRemoveSuccessEffect$ = this.ConfigureState.actions$.pipe(
+            ofType('REMOVE_CLUSTERS_OK'),
+            withLatestFrom(this.ConfigureState.actions$.pipe(ofType(CONFIRM_CLUSTERS_REMOVAL))),
+            tap(([, {clusterIDs}]) => this.IgniteMessages.showInfo(`Cluster(s) removed: ${clusterIDs.length}`)),
+            ignoreElements()
+        );
 
         const _applyChangedIDs = (edit, {cache, igfs, model, cluster} = {}) => ({
             cluster: {
@@ -616,22 +663,24 @@ export default class ConfigEffects {
         });
 
         this.advancedSaveCacheEffect$ = merge(
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_CLUSTER)),
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_CACHE)),
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_IGFS)),
-            this.ConfigureState.actions$.let(ofType(ADVANCED_SAVE_MODEL)),
-        )
-            .withLatestFrom(this.ConfigureState.state$.pluck('edit'))
-            .map(([action, edit]) => ({
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_CLUSTER)),
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_CACHE)),
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_IGFS)),
+            this.ConfigureState.actions$.pipe(ofType(ADVANCED_SAVE_MODEL)),
+        ).pipe(
+            withLatestFrom(this.ConfigureState.state$.pipe(pluck('edit'))),
+            map(([action, edit]) => ({
                 type: ADVANCED_SAVE_COMPLETE_CONFIGURATION,
                 changedItems: _applyChangedIDs(edit, action)
-            }));
-
-        this.basicSaveEffect$ = this.ConfigureState.actions$
-            .let(ofType(BASIC_SAVE))
-            .merge(this.ConfigureState.actions$.let(ofType(BASIC_SAVE_AND_DOWNLOAD)))
-            .withLatestFrom(this.ConfigureState.state$.pluck('edit'))
-            .switchMap(([action, edit]) => {
+            }))
+        );
+
+        this.basicSaveEffect$ = merge(
+            this.ConfigureState.actions$.pipe(ofType(BASIC_SAVE)),
+            this.ConfigureState.actions$.pipe(ofType(BASIC_SAVE_AND_DOWNLOAD))
+        ).pipe(
+            withLatestFrom(this.ConfigureState.state$.pipe(pluck('edit'))),
+            switchMap(([action, edit]) => {
                 const changedItems = _applyChangedIDs(edit, {cluster: action.cluster});
                 const actions = [{
                     type: cachesActionTypes.UPSERT,
@@ -651,24 +700,27 @@ export default class ConfigEffects {
                 }
                 ].filter((a) => a.items.length);
 
-                return Observable.of(...actions)
-                .merge(
-                    Observable.fromPromise(this.Clusters.saveBasic(changedItems))
-                    .switchMap((res) => Observable.of(
-                        {type: 'EDIT_CLUSTER', cluster: changedItems.cluster},
-                        basicSaveOK(changedItems)
-                    ))
-                    .catch((res) => Observable.of(
-                        basicSaveErr(changedItems, res),
-                        {type: 'UNDO_ACTIONS', actions}
-                    ))
+                return merge(
+                    of(...actions),
+                    from(this.Clusters.saveBasic(changedItems)).pipe(
+                        switchMap((res) => of(
+                            {type: 'EDIT_CLUSTER', cluster: changedItems.cluster},
+                            basicSaveOK(changedItems)
+                        )),
+                        catchError((res) => of(
+                            basicSaveErr(changedItems, res),
+                            {type: 'UNDO_ACTIONS', actions}
+                        ))
+                    )
                 );
-            });
+            })
+        );
 
-        this.basicSaveOKMessagesEffect$ = this.ConfigureState.actions$
-            .let(ofType(BASIC_SAVE_OK))
-            .do((action) => this.IgniteMessages.showInfo(`Cluster "${action.changedItems.cluster.name}" saved.`))
-            .ignoreElements();
+        this.basicSaveOKMessagesEffect$ = this.ConfigureState.actions$.pipe(
+            ofType(BASIC_SAVE_OK),
+            tap((action) => this.IgniteMessages.showInfo(`Cluster "${action.changedItems.cluster.name}" saved.`)),
+            ignoreElements()
+        );
     }
 
     /**
@@ -691,21 +743,21 @@ export default class ConfigEffects {
 
         setTimeout(() => this.ConfigureState.dispatchAction(action));
 
-        return this.ConfigureState.actions$
-            .filter((a) => a.type === ok || a.type === err)
-            .take(1)
-            .map((a) => {
+        return this.ConfigureState.actions$.pipe(
+            filter((a) => a.type === ok || a.type === err),
+            take(1),
+            map((a) => {
                 if (a.type === err)
                     throw a;
                 else
                     return a;
             })
-            .toPromise();
+        ).toPromise();
     };
 
     connect() {
         return merge(
             ...Object.keys(this).filter((k) => k.endsWith('Effect$')).map((k) => this[k])
-        ).do((a) => this.ConfigureState.dispatchAction(a)).subscribe();
+        ).pipe(tap((a) => this.ConfigureState.dispatchAction(a))).subscribe();
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/store/effects.spec.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/store/effects.spec.js b/modules/web-console/frontend/app/components/page-configure/store/effects.spec.js
index 10e0663..f8b3909 100644
--- a/modules/web-console/frontend/app/components/page-configure/store/effects.spec.js
+++ b/modules/web-console/frontend/app/components/page-configure/store/effects.spec.js
@@ -16,11 +16,10 @@
  */
 
 import {assert} from 'chai';
-import {of} from 'rxjs/observable/of';
-import {_throw} from 'rxjs/observable/throw';
+import {of, throwError} from 'rxjs';
+import {TestScheduler} from 'rxjs/testing';
 import {default as Effects} from './effects';
 import {default as Selectors} from './selectors';
-import {TestScheduler} from 'rxjs/testing/TestScheduler';
 
 const makeMocks = (target, mocks) => new Map(target.$inject.map((provider) => {
     return (provider in mocks) ? [provider, mocks[provider]] : [provider, {}];
@@ -121,7 +120,7 @@ suite('Configuration store effects', () => {
                 stateMarbles: 'AB',
                 mocks: {
                     ...mocks,
-                    Clusters: {getCluster: () => _throw({data: 'Error'})}
+                    Clusters: {getCluster: () => throwError({data: 'Error'})}
                 }
             });
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/store/selectors.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/store/selectors.js b/modules/web-console/frontend/app/components/page-configure/store/selectors.js
index c9df643..0c70e59 100644
--- a/modules/web-console/frontend/app/components/page-configure/store/selectors.js
+++ b/modules/web-console/frontend/app/components/page-configure/store/selectors.js
@@ -16,13 +16,8 @@
  */
 
 import {uniqueName} from 'app/utils/uniqueName';
-import {of} from 'rxjs/observable/of';
-import {empty} from 'rxjs/observable/empty';
-import {combineLatest} from 'rxjs/observable/combineLatest';
-import 'rxjs/add/operator/filter';
-import 'rxjs/add/operator/mergeMap';
-import 'rxjs/add/observable/combineLatest';
-import {Observable} from 'rxjs/Observable';
+import {of, empty, combineLatest, forkJoin, pipe} from 'rxjs';
+import {filter, pluck, map, switchMap, take, distinctUntilChanged, exhaustMap} from 'rxjs/operators';
 import {defaultNames} from '../defaultNames';
 
 import {default as Caches} from 'app/services/Caches';
@@ -30,22 +25,22 @@ import {default as Clusters} from 'app/services/Clusters';
 import {default as IGFSs} from 'app/services/IGFSs';
 import {default as Models} from 'app/services/Models';
 
-const isDefined = (s) => s.filter((v) => v);
+const isDefined = filter((v) => v);
 
-const selectItems = (path) => (s) => s.filter((s) => s).pluck(path).filter((v) => v);
+const selectItems = (path) => pipe(filter((s) => s), pluck(path), filter((v) => v));
 
-const selectValues = (s) => s.map((v) => v && [...v.value.values()]);
+const selectValues = map((v) => v && [...v.value.values()]);
 
-export const selectMapItem = (mapPath, key) => (s) => s.pluck(mapPath).map((v) => v && v.get(key));
+export const selectMapItem = (mapPath, key) => pipe(pluck(mapPath), map((v) => v && v.get(key)));
 
-const selectMapItems = (mapPath, keys) => (s) => s.pluck(mapPath).map((v) => v && keys.map((key) => v.get(key)));
+const selectMapItems = (mapPath, keys) => pipe(pluck(mapPath), map((v) => v && keys.map((key) => v.get(key))));
 
-const selectItemToEdit = ({items, itemFactory, defaultName = '', itemID}) => (s) => s.switchMap((item) => {
+const selectItemToEdit = ({items, itemFactory, defaultName = '', itemID}) => switchMap((item) => {
     if (item)
         return of(Object.assign(itemFactory(), item));
 
     if (itemID === 'new')
-        return items.take(1).map((items) => Object.assign(itemFactory(), {name: uniqueName(defaultName, items)}));
+        return items.pipe(take(1), map((items) => Object.assign(itemFactory(), {name: uniqueName(defaultName, items)})));
 
     if (!itemID)
         return of(null);
@@ -54,22 +49,24 @@ const selectItemToEdit = ({items, itemFactory, defaultName = '', itemID}) => (s)
 });
 
 const currentShortItems = ({changesKey, shortKey}) => (state$) => {
-    return Observable.combineLatest(
-        state$.pluck('edit', 'changes', changesKey).let(isDefined).distinctUntilChanged(),
-        state$.pluck(shortKey, 'value').let(isDefined).distinctUntilChanged()
-    )
-        .map(([{ids = [], changedItems}, shortItems]) => {
+    return combineLatest(
+        state$.pipe(pluck('edit', 'changes', changesKey), isDefined, distinctUntilChanged()),
+        state$.pipe(pluck(shortKey, 'value'), isDefined, distinctUntilChanged())
+    ).pipe(
+        map(([{ids = [], changedItems}, shortItems]) => {
             if (!ids.length || !shortItems)
                 return [];
 
             return ids.map((id) => changedItems.find(({_id}) => _id === id) || shortItems.get(id));
-        })
-        .map((v) => v.filter((v) => v));
+        }),
+        map((v) => v.filter((v) => v))
+    );
 };
 
-const selectNames = (itemIDs, nameAt = 'name') => (items) => items
-    .pluck('value')
-    .map((items) => itemIDs.map((id) => items.get(id)[nameAt]));
+const selectNames = (itemIDs, nameAt = 'name') => pipe(
+    pluck('value'),
+    map((items) => itemIDs.map((id) => items.get(id)[nameAt]))
+);
 
 export default class ConfigSelectors {
     static $inject = ['Caches', 'Clusters', 'IGFSs', 'Models'];
@@ -95,17 +92,18 @@ export default class ConfigSelectors {
          * @returns {(state$: Observable) => Observable<{pristine: boolean, value: Map<string, ig.config.model.ShortDomainModel>}>}
          */
         this.selectShortModels = () => selectItems('shortModels');
-        this.selectShortModelsValue = () => (state$) => state$.let(this.selectShortModels()).let(selectValues);
+        this.selectShortModelsValue = () => (state$) => state$.pipe(this.selectShortModels(), selectValues);
         /**
          * @returns {(state$: Observable) => Observable<Array<ig.config.cluster.ShortCluster>>}
          */
-        this.selectShortClustersValue = () => (state$) => state$.let(this.selectShortClusters()).let(selectValues);
+        this.selectShortClustersValue = () => (state$) => state$.pipe(this.selectShortClusters(), selectValues);
         /**
          * @returns {(state$: Observable) => Observable<Array<string>>}
          */
-        this.selectClusterNames = (clusterIDs) => (state$) => state$
-            .let(this.selectShortClusters())
-            .let(selectNames(clusterIDs));
+        this.selectClusterNames = (clusterIDs) => (state$) => state$.pipe(
+            this.selectShortClusters(),
+            selectNames(clusterIDs)
+        );
     }
 
     selectCluster = (id) => selectMapItem('clusters', id);
@@ -118,52 +116,56 @@ export default class ConfigSelectors {
 
     selectShortCaches = () => selectItems('shortCaches');
 
-    selectShortCachesValue = () => (state$) => state$.let(this.selectShortCaches()).let(selectValues);
+    selectShortCachesValue = () => (state$) => state$.pipe(this.selectShortCaches(), selectValues);
 
     selectShortIGFSs = () => selectItems('shortIgfss');
 
-    selectShortIGFSsValue = () => (state$) => state$.let(this.selectShortIGFSs()).let(selectValues);
+    selectShortIGFSsValue = () => (state$) => state$.pipe(this.selectShortIGFSs(), selectValues);
 
-    selectShortModelsValue = () => (state$) => state$.let(this.selectShortModels()).let(selectValues);
+    selectShortModelsValue = () => (state$) => state$.pipe(this.selectShortModels(), selectValues);
 
-    selectCacheToEdit = (cacheID) => (state$) => state$
-        .let(this.selectCache(cacheID))
-        .distinctUntilChanged()
-        .let(selectItemToEdit({
-            items: state$.let(this.selectCurrentShortCaches),
+    selectCacheToEdit = (cacheID) => (state$) => state$.pipe(
+        this.selectCache(cacheID),
+        distinctUntilChanged(),
+        selectItemToEdit({
+            items: state$.pipe(this.selectCurrentShortCaches),
             itemFactory: () => this.Caches.getBlankCache(),
             defaultName: defaultNames.cache,
             itemID: cacheID
-        }));
+        })
+    );
 
-    selectIGFSToEdit = (itemID) => (state$) => state$
-        .let(this.selectIGFS(itemID))
-        .distinctUntilChanged()
-        .let(selectItemToEdit({
-            items: state$.let(this.selectCurrentShortIGFSs),
+    selectIGFSToEdit = (itemID) => (state$) => state$.pipe(
+        this.selectIGFS(itemID),
+        distinctUntilChanged(),
+        selectItemToEdit({
+            items: state$.pipe(this.selectCurrentShortIGFSs),
             itemFactory: () => this.IGFSs.getBlankIGFS(),
             defaultName: defaultNames.igfs,
             itemID
-        }));
+        })
+    );
 
-    selectModelToEdit = (itemID) => (state$) => state$
-        .let(this.selectModel(itemID))
-        .distinctUntilChanged()
-        .let(selectItemToEdit({
-            items: state$.let(this.selectCurrentShortModels),
+    selectModelToEdit = (itemID) => (state$) => state$.pipe(
+        this.selectModel(itemID),
+        distinctUntilChanged(),
+        selectItemToEdit({
+            items: state$.pipe(this.selectCurrentShortModels),
             itemFactory: () => this.Models.getBlankModel(),
             itemID
-        }));
+        })
+    );
 
-    selectClusterToEdit = (clusterID, defaultName = defaultNames.cluster) => (state$) => state$
-        .let(this.selectCluster(clusterID))
-        .distinctUntilChanged()
-        .let(selectItemToEdit({
-            items: state$.let(this.selectShortClustersValue()),
+    selectClusterToEdit = (clusterID, defaultName = defaultNames.cluster) => (state$) => state$.pipe(
+        this.selectCluster(clusterID),
+        distinctUntilChanged(),
+        selectItemToEdit({
+            items: state$.pipe(this.selectShortClustersValue()),
             itemFactory: () => this.Clusters.getBlankCluster(),
             defaultName,
             itemID: clusterID
-        }));
+        })
+    );
 
     selectCurrentShortCaches = currentShortItems({changesKey: 'caches', shortKey: 'shortCaches'});
 
@@ -176,34 +178,33 @@ export default class ConfigSelectors {
             return of([]);
 
         return combineLatest(
-            state$.let(this.selectCluster(clusterID)).pluck('caches'),
-            state$.let(this.selectShortCaches()).pluck('value'),
+            state$.pipe(this.selectCluster(clusterID), pluck('caches')),
+            state$.pipe(this.selectShortCaches(), pluck('value')),
             (ids, items) => ids.map((id) => items.get(id))
         );
     };
 
     selectCompleteClusterConfiguration = ({clusterID, isDemo}) => (state$) => {
         const hasValues = (array) => !array.some((v) => !v);
-        return state$.let(this.selectCluster(clusterID))
-        .exhaustMap((cluster) => {
-            if (!cluster)
-                return of({__isComplete: false});
-
-            const withSpace = (array) => array.map((c) => ({...c, space: cluster.space}));
-
-            return Observable.forkJoin(
-                state$.let(selectMapItems('caches', cluster.caches || [])).take(1),
-                state$.let(selectMapItems('models', cluster.models || [])).take(1),
-                state$.let(selectMapItems('igfss', cluster.igfss || [])).take(1),
-            )
-            .map(([caches, models, igfss]) => ({
-                cluster,
-                caches,
-                domains: models,
-                igfss,
-                spaces: [{_id: cluster.space, demo: isDemo}],
-                __isComplete: !!cluster && !(!hasValues(caches) || !hasValues(models) || !hasValues(igfss))
-            }));
-        });
+        return state$.pipe(
+            this.selectCluster(clusterID),
+            exhaustMap((cluster) => {
+                if (!cluster)
+                    return of({__isComplete: false});
+
+                return forkJoin(
+                    state$.pipe(selectMapItems('caches', cluster.caches || []), take(1)),
+                    state$.pipe(selectMapItems('models', cluster.models || []), take(1)),
+                    state$.pipe(selectMapItems('igfss', cluster.igfss || []), take(1)),
+                ).pipe(map(([caches, models, igfss]) => ({
+                    cluster,
+                    caches,
+                    domains: models,
+                    igfss,
+                    spaces: [{_id: cluster.space, demo: isDemo}],
+                    __isComplete: !!cluster && !(!hasValues(caches) || !hasValues(models) || !hasValues(igfss))
+                })));
+            })
+        );
     };
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-queries/components/queries-notebook/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-queries/components/queries-notebook/controller.ts b/modules/web-console/frontend/app/components/page-queries/components/queries-notebook/controller.ts
index 3ac3177..78274e6 100644
--- a/modules/web-console/frontend/app/components/page-queries/components/queries-notebook/controller.ts
+++ b/modules/web-console/frontend/app/components/page-queries/components/queries-notebook/controller.ts
@@ -18,15 +18,8 @@
 import _ from 'lodash';
 import {nonEmpty, nonNil} from 'app/utils/lodashMixins';
 import id8 from 'app/utils/id8';
-import 'rxjs/add/operator/mergeMap';
-import 'rxjs/add/operator/merge';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/exhaustMap';
-import 'rxjs/add/operator/distinctUntilChanged';
-
-import { fromPromise } from 'rxjs/observable/fromPromise';
-import { timer } from 'rxjs/observable/timer';
-import { defer } from 'rxjs/observable/defer';
+import {timer, merge, defer, from} from 'rxjs';
+import {mergeMap, tap, switchMap, exhaustMap, take} from 'rxjs/operators';
 
 import {CSV} from 'app/services/CSV';
 
@@ -930,27 +923,28 @@ export class NotebookCtrl {
         };
 
         const _startWatch = () => {
-            const awaitClusters$ = fromPromise(
+            const awaitClusters$ = from(
                 agentMgr.startClusterWatch('Leave Queries', 'default-state'));
 
             const finishLoading$ = defer(() => {
                 if (!$root.IgniteDemoMode)
                     Loading.finish('sqlLoading');
-            }).take(1);
+            }).pipe(take(1));
 
             const refreshCaches = (period) => {
-                return timer(0, period).exhaustMap(() => _refreshCaches()).merge(finishLoading$);
+                return merge(timer(0, period).pipe(exhaustMap(() => _refreshCaches())), finishLoading$);
             };
 
-            this.refresh$ = awaitClusters$
-                .mergeMap(() => agentMgr.currentCluster$)
-                .do(() => Loading.start('sqlLoading'))
-                .do(() => {
+            this.refresh$ = awaitClusters$.pipe(
+                mergeMap(() => agentMgr.currentCluster$),
+                tap(() => Loading.start('sqlLoading')),
+                tap(() => {
                     _.forEach($scope.notebook.paragraphs, (paragraph) => {
                         paragraph.reset($interval);
                     });
-                })
-                .switchMap(() => refreshCaches(5000))
+                }),
+                switchMap(() => refreshCaches(5000))
+            )
                 .subscribe();
         };
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
index ef0d423..56eef35 100644
--- a/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
+++ b/modules/web-console/frontend/app/modules/agent/AgentManager.service.js
@@ -18,11 +18,8 @@
 import _ from 'lodash';
 import {nonEmpty, nonNil} from 'app/utils/lodashMixins';
 
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/first';
-import 'rxjs/add/operator/partition';
-import 'rxjs/add/operator/takeUntil';
-import 'rxjs/add/operator/pluck';
+import {BehaviorSubject} from 'rxjs';
+import {first, pluck, tap, distinctUntilChanged, map, filter} from 'rxjs/operators';
 
 import AgentModal from './AgentModal.service';
 // @ts-ignore
@@ -185,14 +182,16 @@ export default class AgentManager {
 
         let prevCluster;
 
-        this.currentCluster$ = this.connectionSbj
-            .distinctUntilChanged(({ cluster }) => prevCluster === cluster)
-            .do(({ cluster }) => prevCluster = cluster);
+        this.currentCluster$ = this.connectionSbj.pipe(
+            distinctUntilChanged(({ cluster }) => prevCluster === cluster),
+            tap(({ cluster }) => prevCluster = cluster)
+        );
 
-        this.clusterIsActive$ = this.connectionSbj
-            .map(({ cluster }) => cluster)
-            .filter((cluster) => Boolean(cluster))
-            .pluck('active');
+        this.clusterIsActive$ = this.connectionSbj.pipe(
+            map(({ cluster }) => cluster),
+            filter((cluster) => Boolean(cluster)),
+            pluck('active')
+        );
 
         if (!this.isDemoMode()) {
             this.connectionSbj.subscribe({
@@ -524,7 +523,7 @@ export default class AgentManager {
         if (this.isDemoMode())
             return Promise.resolve(this._executeOnActiveCluster({}, {}, event, params));
 
-        return this.connectionSbj.first().toPromise()
+        return this.connectionSbj.pipe(first()).toPromise()
             .then(({cluster}) => {
                 if (_.isNil(cluster))
                     throw new Error('Failed to execute request on cluster.');

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/modules/user/User.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/user/User.service.js b/modules/web-console/frontend/app/modules/user/User.service.js
index 3515c1b..da84dcc 100644
--- a/modules/web-console/frontend/app/modules/user/User.service.js
+++ b/modules/web-console/frontend/app/modules/user/User.service.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import {ReplaySubject} from 'rxjs/ReplaySubject';
+import {ReplaySubject} from 'rxjs';
 
 /**
  * @typedef User

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/services/Clusters.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Clusters.js b/modules/web-console/frontend/app/services/Clusters.js
index e0a2ec7..5649f0a 100644
--- a/modules/web-console/frontend/app/services/Clusters.js
+++ b/modules/web-console/frontend/app/services/Clusters.js
@@ -16,8 +16,7 @@
  */
 
 import get from 'lodash/get';
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/observable/fromPromise';
+import {from} from 'rxjs';
 import ObjectID from 'bson-objectid/objectid';
 import {uniqueName} from 'app/utils/uniqueName';
 import omit from 'lodash/fp/omit';
@@ -117,7 +116,7 @@ export default class Clusters {
     }
 
     getClustersOverview$() {
-        return Observable.fromPromise(this.getClustersOverview());
+        return from(this.getClustersOverview());
     }
 
     saveCluster(cluster) {
@@ -125,7 +124,7 @@ export default class Clusters {
     }
 
     saveCluster$(cluster) {
-        return Observable.fromPromise(this.saveCluster(cluster));
+        return from(this.saveCluster(cluster));
     }
 
     removeCluster(cluster) {
@@ -133,7 +132,7 @@ export default class Clusters {
     }
 
     removeCluster$(cluster) {
-        return Observable.fromPromise(this.removeCluster(cluster));
+        return from(this.removeCluster(cluster));
     }
 
     saveBasic(changedItems) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/services/Version.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Version.service.js b/modules/web-console/frontend/app/services/Version.service.js
index 8bbf6ef..8b76d58 100644
--- a/modules/web-console/frontend/app/services/Version.service.js
+++ b/modules/web-console/frontend/app/services/Version.service.js
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import { BehaviorSubject } from 'rxjs/BehaviorSubject';
+import { BehaviorSubject } from 'rxjs';
 import _ from 'lodash';
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/services/store.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/store.ts b/modules/web-console/frontend/app/services/store.ts
index 19dde69..4498d1e 100644
--- a/modules/web-console/frontend/app/services/store.ts
+++ b/modules/web-console/frontend/app/services/store.ts
@@ -15,10 +15,8 @@
  * limitations under the License.
  */
 
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import {Subject} from 'rxjs/Subject';
+import {BehaviorSubject, Subject, merge} from 'rxjs';
 import {scan, tap} from 'rxjs/operators';
-import {merge} from 'rxjs/observable/merge';
 
 interface Reducer<State, Actions> {
     (state: State, action: Actions): State
@@ -27,9 +25,9 @@ interface Reducer<State, Actions> {
 export class Store<Actions, State> {
     static $inject = ['$injector'];
 
-    actions$: Subject<Actions>
-    state$: BehaviorSubject<State>
-    private _reducers: Array<Reducer<State, Actions>>
+    actions$: Subject<Actions>;
+    state$: BehaviorSubject<State>;
+    private _reducers: Array<Reducer<State, Actions>>;
 
     constructor(private $injector: ng.auto.IInjectorService) {
         this.$injector = $injector;

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/store/ofType.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/store/ofType.ts b/modules/web-console/frontend/app/store/ofType.ts
index 3d3bd8e..220de5f 100644
--- a/modules/web-console/frontend/app/store/ofType.ts
+++ b/modules/web-console/frontend/app/store/ofType.ts
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-import {OperatorFunction} from 'rxjs/interfaces';
+import {OperatorFunction} from 'rxjs';
 import {filter} from 'rxjs/operators';
 
 type Action = {type: string};

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/utils/SimpleWorkerPool.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/utils/SimpleWorkerPool.js b/modules/web-console/frontend/app/utils/SimpleWorkerPool.js
index 8e7aab7..25c7ae4 100644
--- a/modules/web-console/frontend/app/utils/SimpleWorkerPool.js
+++ b/modules/web-console/frontend/app/utils/SimpleWorkerPool.js
@@ -16,15 +16,8 @@
  */
 
 import _ from 'lodash';
-
-import {Observable} from 'rxjs/Observable';
-import {Subject} from 'rxjs/Subject';
-import 'rxjs/add/observable/race';
-import 'rxjs/add/operator/filter';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/pluck';
-import 'rxjs/add/operator/take';
-import 'rxjs/add/operator/toPromise';
+import {Subject, race} from 'rxjs';
+import {filter, take, pluck, map} from 'rxjs/operators';
 
 /**
  * Simple implementation of workers pool.
@@ -112,11 +105,11 @@ export default class SimpleWorkerPool {
 
         this._run();
 
-        return Observable.race(
-            this.messages$.filter((e) => e.tid === tid).take(1).pluck('m', 'data'),
-            this.errors$.filter((e) => e.tid === tid).take(1).map((e) => {
+        return race(
+            this.messages$.pipe(filter((e) => e.tid === tid), take(1), pluck('m', 'data')),
+            this.errors$.pipe(filter((e) => e.tid === tid), take(1), map((e) => {
                 throw e.e;
             }))
-            .take(1).toPromise();
+        ).pipe(take(1)).toPromise();
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/package.json
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/package.json b/modules/web-console/frontend/package.json
index e8f4ae2..9d848df 100644
--- a/modules/web-console/frontend/package.json
+++ b/modules/web-console/frontend/package.json
@@ -30,7 +30,7 @@
     "@babel/plugin-transform-parameters": "7.0.0",
     "@uirouter/angularjs": "1.0.20",
     "@uirouter/core": "5.0.19",
-    "@uirouter/rx": "0.4.1",
+    "@uirouter/rx": "0.5.0",
     "@uirouter/visualizer": "4.0.2",
     "angular": "1.7.4",
     "angular-acl": "0.1.10",
@@ -70,7 +70,7 @@
     "pako": "1.0.6",
     "resize-observer-polyfill": "1.5.0",
     "roboto-font": "0.1.0",
-    "rxjs": "5.5.11",
+    "rxjs": "6.3.3",
     "socket.io-client": "1.7.3",
     "tf-metatags": "2.0.0"
   },


[05/52] [abbrv] ignite git commit: IGNITE-10555 Set 'TcpDiscoveryVmIpFinder' as default IP finder for tests instead of 'TcpDiscoveryMulticastIpFinder'

Posted by sb...@apache.org.
IGNITE-10555 Set 'TcpDiscoveryVmIpFinder' as default IP finder for tests instead of 'TcpDiscoveryMulticastIpFinder'

Signed-off-by: Anton Vinogradov <av...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/83abf892
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/83abf892
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/83abf892

Branch: refs/heads/ignite-627
Commit: 83abf89237986185d0b20c40f5bd3aac3f0ec403
Parents: cde6cae
Author: Vyacheslav Daradur <da...@gmail.com>
Authored: Mon Dec 17 13:56:12 2018 +0300
Committer: Anton Vinogradov <av...@apache.org>
Committed: Mon Dec 17 13:56:12 2018 +0300

----------------------------------------------------------------------
 ...entConnectAfterCommunicationFailureTest.java |  4 ++++
 .../testframework/junits/GridAbstractTest.java  | 24 ++++++++------------
 2 files changed, 14 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/83abf892/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientConnectAfterCommunicationFailureTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientConnectAfterCommunicationFailureTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientConnectAfterCommunicationFailureTest.java
index 4ae4c56..434fe81 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientConnectAfterCommunicationFailureTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientConnectAfterCommunicationFailureTest.java
@@ -25,6 +25,8 @@ import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.util.nio.GridCommunicationClient;
 import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -45,6 +47,8 @@ public class IgniteClientConnectAfterCommunicationFailureTest extends GridCommon
     @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(gridName);
 
+        ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(new TcpDiscoveryMulticastIpFinder());
+
         cfg.setNetworkTimeout(500);
         cfg.setCommunicationSpi(new TcpCommunicationSpi(gridName.contains("block")));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/83abf892/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 486e80a..241211c 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -102,7 +102,6 @@ import org.apache.ignite.spi.discovery.DiscoverySpiCustomMessage;
 import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.TestTcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.apache.ignite.spi.eventstorage.memory.MemoryEventStorageSpi;
 import org.apache.ignite.testframework.GridTestUtils;
@@ -165,6 +164,9 @@ public abstract class GridAbstractTest extends TestCase {
         setAddresses(Collections.singleton("127.0.0.1:47500..47509"));
     }};
 
+    /** Shared static IP finder which is used in configuration at nodes startup <b>for all test methods in class</b>. */
+    protected static TcpDiscoveryIpFinder sharedStaticIpFinder;
+
     /** */
     private static final int DFLT_TOP_WAIT_TIMEOUT = 2000;
 
@@ -620,6 +622,8 @@ public abstract class GridAbstractTest extends TestCase {
         }
 
         if (isFirstTest()) {
+            sharedStaticIpFinder = new TcpDiscoveryVmIpFinder(true);
+
             info(">>> Starting test class: " + testClassDescription() + " <<<");
 
             if (isSafeTopology())
@@ -1541,9 +1545,6 @@ public abstract class GridAbstractTest extends TestCase {
         if (cfg.getDiscoverySpi() instanceof TcpDiscoverySpi)
             ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setJoinTimeout(getTestTimeout());
 
-        if (isMultiJvm())
-            ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(LOCAL_IP_FINDER);
-
         return cfg;
     }
 
@@ -1694,18 +1695,13 @@ public abstract class GridAbstractTest extends TestCase {
         // Set metrics update interval to 1 second to speed up tests.
         cfg.setMetricsUpdateFrequency(1000);
 
-        String mcastAddr = GridTestUtils.getNextMulticastGroup(getClass());
-
-        TcpDiscoveryMulticastIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
+        if (!isMultiJvm()) {
+            assert sharedStaticIpFinder != null : "Shared static IP finder should be initialized at this point.";
 
-        ipFinder.setAddresses(Collections.singleton("127.0.0.1:" + TcpDiscoverySpi.DFLT_PORT));
-
-        if (!F.isEmpty(mcastAddr)) {
-            ipFinder.setMulticastGroup(mcastAddr);
-            ipFinder.setMulticastPort(GridTestUtils.getNextMulticastPort(getClass()));
+            discoSpi.setIpFinder(sharedStaticIpFinder);
         }
-
-        discoSpi.setIpFinder(ipFinder);
+        else
+            discoSpi.setIpFinder(LOCAL_IP_FINDER);
 
         cfg.setDiscoverySpi(discoSpi);
 


[35/52] [abbrv] ignite git commit: IGNITE-10371: [ML] Add multiple metrics calculation for Binary Classification Evaluation process

Posted by sb...@apache.org.
IGNITE-10371: [ML] Add multiple metrics calculation for
Binary Classification Evaluation process

This closes #5612


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/f2d6e436
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/f2d6e436
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/f2d6e436

Branch: refs/heads/ignite-627
Commit: f2d6e43605f8daaa12c3cb729a1ddd56bf36f564
Parents: ad9d561
Author: zaleslaw <za...@gmail.com>
Authored: Tue Dec 18 21:53:32 2018 +0300
Committer: Yury Babak <yb...@gridgain.com>
Committed: Tue Dec 18 21:53:32 2018 +0300

----------------------------------------------------------------------
 .../ml/selection/scoring/EvaluatorExample.java  |  83 +++++++++
 .../scoring/MultipleMetricsExample.java         |  82 ++++++++
 .../ml/tutorial/Step_1_Read_and_Learn.java      |   6 +-
 .../examples/ml/tutorial/Step_2_Imputing.java   |   6 +-
 .../examples/ml/tutorial/Step_3_Categorial.java |   6 +-
 .../Step_3_Categorial_with_One_Hot_Encoder.java |   6 +-
 .../ml/tutorial/Step_4_Add_age_fare.java        |   6 +-
 .../examples/ml/tutorial/Step_5_Scaling.java    |   6 +-
 .../tutorial/Step_5_Scaling_with_Pipeline.java  |   6 +-
 .../ignite/examples/ml/tutorial/Step_6_KNN.java |   6 +-
 .../ml/tutorial/Step_7_Split_train_test.java    |   6 +-
 .../ignite/examples/ml/tutorial/Step_8_CV.java  |   6 +-
 .../ml/tutorial/Step_8_CV_with_Param_Grid.java  |   6 +-
 .../ml/tutorial/Step_9_Go_to_LogReg.java        |   6 +-
 .../cursor/CacheBasedLabelPairCursor.java       |   6 +-
 .../BinaryClassificationEvaluator.java          | 184 ++++++++++++++++++
 .../selection/scoring/evaluator/Evaluator.java  | 104 -----------
 .../ml/selection/scoring/metric/Accuracy.java   |   5 +
 .../BinaryClassificationMetricValues.java       | 185 +++++++++++++++++++
 .../metric/BinaryClassificationMetrics.java     |  86 +++++++++
 .../selection/scoring/metric/ClassMetric.java   |  37 ++++
 .../ml/selection/scoring/metric/Fmeasure.java   |  22 ++-
 .../ml/selection/scoring/metric/Metric.java     |   9 +
 .../ml/selection/scoring/metric/Precision.java  |  23 ++-
 .../ml/selection/scoring/metric/Recall.java     |  22 ++-
 .../metric/UnknownClassLabelException.java      |  38 ++++
 .../scoring/evaluator/EvaluatorTest.java        |   6 +-
 27 files changed, 789 insertions(+), 175 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java
new file mode 100644
index 0000000..a6a989b
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/EvaluatorExample.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.examples.ml.selection.scoring;
+
+import java.io.FileNotFoundException;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
+import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
+import org.apache.ignite.ml.svm.SVMLinearClassificationModel;
+import org.apache.ignite.ml.svm.SVMLinearClassificationTrainer;
+import org.apache.ignite.ml.util.MLSandboxDatasets;
+import org.apache.ignite.ml.util.SandboxMLCache;
+
+/**
+ * Run SVM classification trainer ({@link SVMLinearClassificationTrainer}) over distributed dataset.
+ * <p>
+ * Code in this example launches Ignite grid and fills the cache with test data points (based on the
+ * <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
+ * <p>
+ * After that it trains the model based on the specified data using
+ * <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">kNN</a> algorithm.</p>
+ * <p>
+ * Finally, this example loops over the test set of data points, applies the trained model to predict what cluster
+ * does this point belong to, and compares prediction to expected outcome (ground truth).</p>
+ * <p>
+ * You can change the test data used in this example and re-run it to explore this algorithm further.</p>
+ */
+public class EvaluatorExample {
+    /** Run example. */
+    public static void main(String[] args) throws FileNotFoundException {
+        System.out.println();
+        System.out.println(">>> kNN multi-class classification algorithm over cached dataset usage example started.");
+        // Start ignite grid.
+        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+            System.out.println(">>> Ignite grid started.");
+
+            IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite)
+                .fillCacheWith(MLSandboxDatasets.TWO_CLASSED_IRIS);
+
+            SVMLinearClassificationTrainer trainer = new SVMLinearClassificationTrainer();
+
+            IgniteBiFunction<Integer, Vector, Vector> featureExtractor = (k, v) -> v.copyOfRange(1, v.size());
+            IgniteBiFunction<Integer, Vector, Double> lbExtractor = (k, v) -> v.get(0);
+
+            SVMLinearClassificationModel mdl = trainer.fit(
+                ignite,
+                dataCache,
+                featureExtractor,
+                lbExtractor
+            );
+
+            double accuracy = BinaryClassificationEvaluator.evaluate(
+                dataCache,
+                mdl,
+                featureExtractor,
+                lbExtractor,
+                new Accuracy<>()
+            );
+
+            System.out.println("\n>>> Accuracy " + accuracy);
+            System.out.println("\n>>> Test Error " + (1 - accuracy));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java
new file mode 100644
index 0000000..b8c76e0
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/selection/scoring/MultipleMetricsExample.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.examples.ml.selection.scoring;
+
+import java.io.FileNotFoundException;
+import java.util.Map;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.ml.knn.classification.KNNClassificationTrainer;
+import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
+import org.apache.ignite.ml.svm.SVMLinearClassificationModel;
+import org.apache.ignite.ml.svm.SVMLinearClassificationTrainer;
+import org.apache.ignite.ml.util.MLSandboxDatasets;
+import org.apache.ignite.ml.util.SandboxMLCache;
+
+/**
+ * Run kNN multi-class classification trainer ({@link KNNClassificationTrainer}) over distributed dataset.
+ * <p>
+ * Code in this example launches Ignite grid and fills the cache with test data points (based on the
+ * <a href="https://en.wikipedia.org/wiki/Iris_flower_data_set"></a>Iris dataset</a>).</p>
+ * <p>
+ * After that it trains the model based on the specified data using
+ * <a href="https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm">kNN</a> algorithm.</p>
+ * <p>
+ * Finally, this example loops over the test set of data points, applies the trained model to predict what cluster
+ * does this point belong to, and compares prediction to expected outcome (ground truth).</p>
+ * <p>
+ * You can change the test data used in this example and re-run it to explore this algorithm further.</p>
+ */
+public class MultipleMetricsExample {
+    /** Run example. */
+    public static void main(String[] args) throws FileNotFoundException {
+        // Start ignite grid.
+        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+            System.out.println(">>> Ignite grid started.");
+
+            IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite)
+                .fillCacheWith(MLSandboxDatasets.TWO_CLASSED_IRIS);
+
+            SVMLinearClassificationTrainer trainer = new SVMLinearClassificationTrainer();
+
+            IgniteBiFunction<Integer, Vector, Vector> featureExtractor = (k, v) -> v.copyOfRange(1, v.size());
+            IgniteBiFunction<Integer, Vector, Double> lbExtractor = (k, v) -> v.get(0);
+
+            SVMLinearClassificationModel mdl = trainer.fit(
+                ignite,
+                dataCache,
+                featureExtractor,
+                lbExtractor
+            );
+
+            Map<String, Double> scores = BinaryClassificationEvaluator.evaluate(
+                dataCache,
+                mdl,
+                featureExtractor,
+                lbExtractor
+            ).toMap();
+
+            scores.forEach(
+                (metricName, score) -> System.out.println("\n>>>" + metricName + ": " + score)
+            );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java
index 481fa1d..0cbde9c 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_1_Read_and_Learn.java
@@ -24,7 +24,7 @@ import org.apache.ignite.Ignition;
 import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 import org.apache.ignite.ml.tree.DecisionTreeNode;
@@ -38,7 +38,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * After that it trains the model based on the specified data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_1_Read_and_Learn {
     /** Run example. */
@@ -66,7 +66,7 @@ public class Step_1_Read_and_Learn {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     featureExtractor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java
index d60dc4b..6fe41ab 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_2_Imputing.java
@@ -25,7 +25,7 @@ import org.apache.ignite.ml.math.functions.IgniteBiFunction;
 import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 import org.apache.ignite.ml.tree.DecisionTreeNode;
@@ -40,7 +40,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_2_Imputing {
     /** Run example. */
@@ -75,7 +75,7 @@ public class Step_2_Imputing {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     imputingPreprocessor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java
index ac2fe08..f9bd014 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial.java
@@ -26,7 +26,7 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.preprocessing.encoding.EncoderTrainer;
 import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 import org.apache.ignite.ml.tree.DecisionTreeNode;
@@ -43,7 +43,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_3_Categorial {
     /** Run example. */
@@ -88,7 +88,7 @@ public class Step_3_Categorial {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     imputingPreprocessor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial_with_One_Hot_Encoder.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial_with_One_Hot_Encoder.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial_with_One_Hot_Encoder.java
index f0b6efe..0b3e235 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial_with_One_Hot_Encoder.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_3_Categorial_with_One_Hot_Encoder.java
@@ -26,7 +26,7 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.preprocessing.encoding.EncoderTrainer;
 import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 import org.apache.ignite.ml.tree.DecisionTreeNode;
@@ -44,7 +44,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_3_Categorial_with_One_Hot_Encoder {
     /** Run example. */
@@ -91,7 +91,7 @@ public class Step_3_Categorial_with_One_Hot_Encoder {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     imputingPreprocessor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java
index 71e9efd..7576cd6 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_4_Add_age_fare.java
@@ -26,7 +26,7 @@ import org.apache.ignite.ml.math.primitives.vector.Vector;
 import org.apache.ignite.ml.preprocessing.encoding.EncoderTrainer;
 import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 import org.apache.ignite.ml.tree.DecisionTreeNode;
@@ -41,7 +41,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_4_Add_age_fare {
     /** Run example. */
@@ -87,7 +87,7 @@ public class Step_4_Add_age_fare {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     imputingPreprocessor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java
index fe7bf91..065eb90 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling.java
@@ -28,7 +28,7 @@ import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
 import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
 import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 import org.apache.ignite.ml.tree.DecisionTreeNode;
@@ -44,7 +44,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_5_Scaling {
     /** Run example. */
@@ -105,7 +105,7 @@ public class Step_5_Scaling {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     normalizationPreprocessor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling_with_Pipeline.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling_with_Pipeline.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling_with_Pipeline.java
index bd7cc21..2e97ccb 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling_with_Pipeline.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_5_Scaling_with_Pipeline.java
@@ -29,7 +29,7 @@ import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
 import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
 import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
 
@@ -44,7 +44,7 @@ import org.apache.ignite.ml.tree.DecisionTreeClassificationTrainer;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_5_Scaling_with_Pipeline {
     /** Run example. */
@@ -79,7 +79,7 @@ public class Step_5_Scaling_with_Pipeline {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     mdl.getFeatureExtractor(),

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java
index a35b841..d7a0b88 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_6_KNN.java
@@ -31,7 +31,7 @@ import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
 import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
 import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 
 /**
@@ -45,7 +45,7 @@ import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
  * <p>
  * Then, it trains the model based on the processed data using kNN classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_6_KNN {
     /** Run example. */
@@ -106,7 +106,7 @@ public class Step_6_KNN {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     mdl,
                     normalizationPreprocessor,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java
index 53d4d0a..a988abe 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_7_Split_train_test.java
@@ -28,7 +28,7 @@ import org.apache.ignite.ml.preprocessing.encoding.EncoderType;
 import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
 import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
 import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
 import org.apache.ignite.ml.selection.split.TrainTestSplit;
@@ -47,7 +47,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * <p>
  * Then, it trains the model based on the processed data using decision tree classification.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_7_Split_train_test {
     /** Run example. */
@@ -112,7 +112,7 @@ public class Step_7_Split_train_test {
 
                 System.out.println("\n>>> Trained model: " + mdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     split.getTestFilter(),
                     mdl,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java
index feedccf..8a962f3 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV.java
@@ -30,7 +30,7 @@ import org.apache.ignite.ml.preprocessing.imputing.ImputerTrainer;
 import org.apache.ignite.ml.preprocessing.minmaxscaling.MinMaxScalerTrainer;
 import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
 import org.apache.ignite.ml.selection.cv.CrossValidation;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
 import org.apache.ignite.ml.selection.split.TrainTestSplit;
@@ -48,7 +48,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * Then, it tunes hyperparams with K-fold Cross-Validation on the split training set and trains the model based on
  * the processed data using decision tree classification and the obtained hyperparams.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  * <p>
  * The purpose of cross-validation is model checking, not model building.</p>
  * <p>
@@ -175,7 +175,7 @@ public class Step_8_CV {
 
                 System.out.println("\n>>> Trained model: " + bestMdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     split.getTestFilter(),
                     bestMdl,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
index 670f025..19951a2 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_8_CV_with_Param_Grid.java
@@ -32,7 +32,7 @@ import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
 import org.apache.ignite.ml.selection.cv.CrossValidation;
 import org.apache.ignite.ml.selection.cv.CrossValidationResult;
 import org.apache.ignite.ml.selection.paramgrid.ParamGrid;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
 import org.apache.ignite.ml.selection.split.TrainTestSplit;
@@ -50,7 +50,7 @@ import org.apache.ignite.ml.tree.DecisionTreeNode;
  * Then, it tunes hyperparams with K-fold Cross-Validation on the split training set and trains the model based on
  * the processed data using decision tree classification and the obtained hyperparams.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  * <p>
  * The purpose of cross-validation is model checking, not model building.</p>
  * <p>
@@ -163,7 +163,7 @@ public class Step_8_CV_with_Param_Grid {
 
                 System.out.println("\n>>> Trained model: " + bestMdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     split.getTestFilter(),
                     bestMdl,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java
index 58466bd..eb12e58 100644
--- a/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/tutorial/Step_9_Go_to_LogReg.java
@@ -35,7 +35,7 @@ import org.apache.ignite.ml.preprocessing.normalization.NormalizationTrainer;
 import org.apache.ignite.ml.regressions.logistic.LogisticRegressionModel;
 import org.apache.ignite.ml.regressions.logistic.LogisticRegressionSGDTrainer;
 import org.apache.ignite.ml.selection.cv.CrossValidation;
-import org.apache.ignite.ml.selection.scoring.evaluator.Evaluator;
+import org.apache.ignite.ml.selection.scoring.evaluator.BinaryClassificationEvaluator;
 import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
 import org.apache.ignite.ml.selection.split.TrainTestDatasetSplitter;
 import org.apache.ignite.ml.selection.split.TrainTestSplit;
@@ -52,7 +52,7 @@ import org.apache.ignite.ml.selection.split.TrainTestSplit;
  * Then, it tunes hyperparams with K-fold Cross-Validation on the split training set and trains the model based on
  * the processed data using logistic regression and the obtained hyperparams.</p>
  * <p>
- * Finally, this example uses {@link Evaluator} functionality to compute metrics from predictions.</p>
+ * Finally, this example uses {@link BinaryClassificationEvaluator} functionality to compute metrics from predictions.</p>
  */
 public class Step_9_Go_to_LogReg {
     /** Run example. */
@@ -207,7 +207,7 @@ public class Step_9_Go_to_LogReg {
 
                 System.out.println("\n>>> Trained model: " + bestMdl);
 
-                double accuracy = Evaluator.evaluate(
+                double accuracy = BinaryClassificationEvaluator.evaluate(
                     dataCache,
                     split.getTestFilter(),
                     bestMdl,

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.java
index 037cf45..06be96b 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/cursor/CacheBasedLabelPairCursor.java
@@ -98,12 +98,14 @@ public class CacheBasedLabelPairCursor<L, K, V> implements LabelPairCursor<L> {
      * Queries the specified cache using the specified filter.
      *
      * @param upstreamCache Ignite cache with {@code upstream} data.
-     * @param filter Filter for {@code upstream} data.
+     * @param filter Filter for {@code upstream} data. If {@code null} then all entries will be returned.
      * @return Query cursor.
      */
     private QueryCursor<Cache.Entry<K, V>> query(IgniteCache<K, V> upstreamCache, IgniteBiPredicate<K, V> filter) {
         ScanQuery<K, V> qry = new ScanQuery<>();
-        qry.setFilter(filter);
+
+        if (filter != null) // This section was added to keep code correct of qry.setFilter(null) behaviour will changed.
+            qry.setFilter(filter);
 
         return upstreamCache.query(qry);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/BinaryClassificationEvaluator.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/BinaryClassificationEvaluator.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/BinaryClassificationEvaluator.java
new file mode 100644
index 0000000..30adc5c
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/BinaryClassificationEvaluator.java
@@ -0,0 +1,184 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.selection.scoring.evaluator;
+
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.lang.IgniteBiPredicate;
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.selection.scoring.cursor.CacheBasedLabelPairCursor;
+import org.apache.ignite.ml.selection.scoring.cursor.LabelPairCursor;
+import org.apache.ignite.ml.selection.scoring.metric.BinaryClassificationMetricValues;
+import org.apache.ignite.ml.selection.scoring.metric.BinaryClassificationMetrics;
+import org.apache.ignite.ml.selection.scoring.metric.Metric;
+
+/**
+ * Binary classification evaluator that computes metrics from predictions and ground truth values.
+ */
+public class BinaryClassificationEvaluator {
+    /**
+     * Computes the given metric on the given cache.
+     *
+     * @param dataCache        The given cache.
+     * @param mdl              The model.
+     * @param featureExtractor The feature extractor.
+     * @param lbExtractor      The label extractor.
+     * @param metric           The binary classification metric.
+     * @param <K>              The type of cache entry key.
+     * @param <V>              The type of cache entry value.
+     * @return Computed metric.
+     */
+    public static <L, K, V> double evaluate(IgniteCache<K, V> dataCache,
+                                            Model<Vector, L> mdl,
+                                            IgniteBiFunction<K, V, Vector> featureExtractor,
+                                            IgniteBiFunction<K, V, L> lbExtractor,
+                                            Metric<L> metric) {
+
+        return calculateMetric(dataCache, null, mdl, featureExtractor, lbExtractor, metric);
+    }
+
+    /**
+     * Computes the given metric on the given cache.
+     *
+     * @param dataCache        The given cache.
+     * @param filter           The given filter.
+     * @param mdl              The model.
+     * @param featureExtractor The feature extractor.
+     * @param lbExtractor      The label extractor.
+     * @param metric           The binary classification metric.
+     * @param <L>              The type of label.
+     * @param <K>              The type of cache entry key.
+     * @param <V>              The type of cache entry value.
+     * @return Computed metric.
+     */
+    public static <L, K, V> double evaluate(IgniteCache<K, V> dataCache, IgniteBiPredicate<K, V> filter,
+                                            Model<Vector, L> mdl,
+                                            IgniteBiFunction<K, V, Vector> featureExtractor,
+                                            IgniteBiFunction<K, V, L> lbExtractor,
+                                            Metric<L> metric) {
+
+        return calculateMetric(dataCache, filter, mdl, featureExtractor, lbExtractor, metric);
+    }
+
+    /**
+     * Computes the given metrics on the given cache.
+     *
+     * @param dataCache        The given cache.
+     * @param mdl              The model.
+     * @param featureExtractor The feature extractor.
+     * @param lbExtractor      The label extractor.
+     * @param <K>              The type of cache entry key.
+     * @param <V>              The type of cache entry value.
+     * @return Computed metric.
+     */
+    public static <K, V> BinaryClassificationMetricValues evaluate(IgniteCache<K, V> dataCache,
+                                                                   Model<Vector, Double> mdl,
+                                                                   IgniteBiFunction<K, V, Vector> featureExtractor,
+                                                                   IgniteBiFunction<K, V, Double> lbExtractor) {
+        return calcMetricValues(dataCache, null, mdl, featureExtractor, lbExtractor);
+    }
+
+    /**
+     * Computes the given metrics on the given cache.
+     *
+     * @param dataCache        The given cache.
+     * @param filter           The given filter.
+     * @param mdl              The model.
+     * @param featureExtractor The feature extractor.
+     * @param lbExtractor      The label extractor.
+     * @param <K>              The type of cache entry key.
+     * @param <V>              The type of cache entry value.
+     * @return Computed metric.
+     */
+    public static <K, V> BinaryClassificationMetricValues evaluate(IgniteCache<K, V> dataCache, IgniteBiPredicate<K, V> filter,
+                                                                   Model<Vector, Double> mdl,
+                                                                   IgniteBiFunction<K, V, Vector> featureExtractor,
+                                                                   IgniteBiFunction<K, V, Double> lbExtractor) {
+        return calcMetricValues(dataCache, filter, mdl, featureExtractor, lbExtractor);
+    }
+
+    /**
+     * Computes the given metrics on the given cache.
+     *
+     * @param dataCache        The given cache.
+     * @param filter           The given filter.
+     * @param mdl              The model.
+     * @param featureExtractor The feature extractor.
+     * @param lbExtractor      The label extractor.
+     * @param <K>              The type of cache entry key.
+     * @param <V>              The type of cache entry value.
+     * @return Computed metric.
+     */
+    private static <K, V> BinaryClassificationMetricValues calcMetricValues(IgniteCache<K, V> dataCache,
+                                                                            IgniteBiPredicate<K, V> filter,
+                                                                            Model<Vector, Double> mdl,
+                                                                            IgniteBiFunction<K, V, Vector> featureExtractor,
+                                                                            IgniteBiFunction<K, V, Double> lbExtractor) {
+        BinaryClassificationMetricValues metricValues;
+        BinaryClassificationMetrics binaryMetrics = new BinaryClassificationMetrics();
+
+        try (LabelPairCursor<Double> cursor = new CacheBasedLabelPairCursor<>(
+            dataCache,
+            filter,
+            featureExtractor,
+            lbExtractor,
+            mdl
+        )) {
+            metricValues = binaryMetrics.score(cursor.iterator());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        return metricValues;
+    }
+
+    /**
+     * Computes the given metric on the given cache.
+     *
+     * @param dataCache        The given cache.
+     * @param filter           The given filter.
+     * @param mdl              The model.
+     * @param featureExtractor The feature extractor.
+     * @param lbExtractor      The label extractor.
+     * @param metric           The binary classification metric.
+     * @param <L>              The type of label.
+     * @param <K>              The type of cache entry key.
+     * @param <V>              The type of cache entry value.
+     * @return Computed metric.
+     */
+    private static <L, K, V> double calculateMetric(IgniteCache<K, V> dataCache, IgniteBiPredicate<K, V> filter,
+                                                    Model<Vector, L> mdl, IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, L> lbExtractor,
+                                                    Metric<L> metric) {
+        double metricRes;
+
+        try (LabelPairCursor<L> cursor = new CacheBasedLabelPairCursor<>(
+            dataCache,
+            filter,
+            featureExtractor,
+            lbExtractor,
+            mdl
+        )) {
+            metricRes = metric.score(cursor.iterator());
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        return metricRes;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.java
deleted file mode 100644
index 4535831..0000000
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/evaluator/Evaluator.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.ml.selection.scoring.evaluator;
-
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.lang.IgniteBiPredicate;
-import org.apache.ignite.ml.Model;
-import org.apache.ignite.ml.math.functions.IgniteBiFunction;
-import org.apache.ignite.ml.math.primitives.vector.Vector;
-import org.apache.ignite.ml.selection.scoring.cursor.CacheBasedLabelPairCursor;
-import org.apache.ignite.ml.selection.scoring.cursor.LabelPairCursor;
-import org.apache.ignite.ml.selection.scoring.metric.Accuracy;
-
-/**
- * Binary classification evaluator that compute metrics from predictions.
- */
-public class Evaluator {
-    /**
-     * Computes the given metric on the given cache.
-     *
-     * @param dataCache The given cache.
-     * @param mdl The model.
-     * @param featureExtractor The feature extractor.
-     * @param lbExtractor The label extractor.
-     * @param metric The binary classification metric.
-     * @param <L> The type of label.
-     * @param <K> The type of cache entry key.
-     * @param <V> The type of cache entry value.
-     * @return Computed metric.
-     */
-    public static <L, K, V> double evaluate(IgniteCache<K, V> dataCache,
-        Model<Vector, L> mdl,
-        IgniteBiFunction<K, V, Vector> featureExtractor,
-        IgniteBiFunction<K, V, L> lbExtractor,
-        Accuracy<L> metric) {
-        double metricRes;
-
-        try (LabelPairCursor<L> cursor = new CacheBasedLabelPairCursor<L, K, V>(
-            dataCache,
-            featureExtractor,
-            lbExtractor,
-            mdl
-        )) {
-            metricRes = metric.score(cursor.iterator());
-        }
-        catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-        return metricRes;
-    }
-
-    /**
-     * Computes the given metric on the given cache.
-     *
-     * @param dataCache The given cache.
-     * @param filter The given filter.
-     * @param mdl The model.
-     * @param featureExtractor The feature extractor.
-     * @param lbExtractor The label extractor.
-     * @param metric The binary classification metric.
-     * @param <L> The type of label.
-     * @param <K> The type of cache entry key.
-     * @param <V> The type of cache entry value.
-     * @return Computed metric.
-     */
-    public static <L, K, V> double evaluate(IgniteCache<K, V> dataCache,  IgniteBiPredicate<K, V> filter,
-        Model<Vector, L> mdl,
-        IgniteBiFunction<K, V, Vector> featureExtractor,
-        IgniteBiFunction<K, V, L> lbExtractor,
-        Accuracy<L> metric) {
-        double metricRes;
-
-        try (LabelPairCursor<L> cursor = new CacheBasedLabelPairCursor<L, K, V>(
-            dataCache,
-            filter,
-            featureExtractor,
-            lbExtractor,
-            mdl
-        )) {
-            metricRes = metric.score(cursor.iterator());
-        }
-        catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-
-        return metricRes;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Accuracy.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Accuracy.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Accuracy.java
index 30e6299..fd0656c 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Accuracy.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Accuracy.java
@@ -45,4 +45,9 @@ public class Accuracy<L> implements Metric<L> {
 
         return 1.0 * correctCnt / totalCnt;
     }
+
+    /** {@inheritDoc} */
+    @Override public String name() {
+        return "accuracy";
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetricValues.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetricValues.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetricValues.java
new file mode 100644
index 0000000..04cd981
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetricValues.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.selection.scoring.metric;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Provides access to binary metric values.
+ */
+public class BinaryClassificationMetricValues {
+    /** True Positive (TP). */
+    private double tp;
+
+    /** True Negative (TN). */
+    private double tn;
+
+    /** False Positive (FP). */
+    private double fp;
+
+    /** False Negative (FN). */
+    private double fn;
+
+    /** Sensitivity or True Positive Rate (TPR). */
+    private double recall;
+
+    /** Specificity (SPC) or True Negative Rate (TNR). */
+    private double specificity;
+
+    /** Precision or Positive Predictive Value (PPV). */
+    private double precision;
+
+    /** Negative Predictive Value (NPV). */
+    private double npv;
+
+    /** Fall-out or False Positive Rate (FPR). */
+    private double fallOut;
+
+    /** False Discovery Rate (FDR). */
+    private double fdr;
+
+    /** Miss Rate or False Negative Rate (FNR). */
+    private double missRate;
+
+    /** Accuracy. */
+    private double accuracy;
+
+    /** Balanced accuracy. */
+    private double balancedAccuracy;
+
+    /** F1-Score is the harmonic mean of Precision and Sensitivity. */
+    private double f1Score;
+
+    /**
+     * Initialize an example by 4 metrics.
+     *
+     * @param tp True Positive (TP).
+     * @param tn True Negative (TN).
+     * @param fp False Positive (FP).
+     * @param fn False Negative (FN).
+     */
+    public BinaryClassificationMetricValues(long tp, long tn, long fp, long fn) {
+        this.tp = tp;
+        this.tn = tn;
+        this.fp = fp;
+        this.fn = fn;
+
+        long p = tp + fn;
+        long n = tn + fp;
+        long positivePredictions = tp + fp;
+        long negativePredictions = tn + fn;
+
+        // according to https://github.com/dice-group/gerbil/wiki/Precision,-Recall-and-F1-measure
+        recall = p == 0 ? 1 : (double)tp / p;
+        precision = positivePredictions == 0 ? 1 : (double)tp / positivePredictions;
+        specificity = n == 0 ? 1 : (double)tn / n;
+        npv = negativePredictions == 0 ? 1 : (double)tn / negativePredictions;
+        fallOut = n == 0 ? 1 : (double)fp / n;
+        fdr = positivePredictions == 0 ? 1 : (double)fp / positivePredictions;
+        missRate = p == 0 ? 1 : (double)fn / p;
+
+        f1Score = 2 * (recall * precision) / (recall + precision);
+
+        accuracy = (p + n) == 0 ? 1 : (double)(tp + tn) / (p + n); // multiplication on 1.0 to make double
+        balancedAccuracy = p == 0 && n == 0 ? 1 : ((double)tp / p + (double)tn / n) / 2;
+    }
+
+    /** */
+    public double tp() {
+        return tp;
+    }
+
+    /** */
+    public double tn() {
+        return tn;
+    }
+
+    /** */
+    public double fp() {
+        return fp;
+    }
+
+    /** */
+    public double fn() {
+        return fn;
+    }
+
+    /** Returns Sensitivity or True Positive Rate (TPR). */
+    public double recall() {
+        return recall;
+    }
+
+    /** Returns Specificity (SPC) or True Negative Rate (TNR). */
+    public double specificity() {
+        return specificity;
+    }
+
+    /** Returns Precision or Positive Predictive Value (PPV). */
+    public double precision() {
+        return precision;
+    }
+
+    /** Returns Negative Predictive Value (NPV). */
+    public double npv() {
+        return npv;
+    }
+
+    /** Returns Fall-out or False Positive Rate (FPR). */
+    public double fallOut() {
+        return fallOut;
+    }
+
+    /** Returns False Discovery Rate (FDR). */
+    public double fdr() {
+        return fdr;
+    }
+
+    /** Returns Miss Rate or False Negative Rate (FNR). */
+    public double missRate() {
+        return missRate;
+    }
+
+    /** Returns Accuracy. */
+    public double accuracy() {
+        return accuracy;
+    }
+
+    /** Returns Balanced accuracy. */
+    public double balancedAccuracy() {
+        return balancedAccuracy;
+    }
+
+    /** Returns F1-Score is the harmonic mean of Precision and Sensitivity. */
+    public double f1Score() {
+        return f1Score;
+    }
+
+    /** Returns the pair of metric name and metric value. */
+    public Map<String, Double> toMap() {
+        Map<String, Double> metricValues = new HashMap<>();
+        for (Field field : getClass().getDeclaredFields())
+            try {
+                metricValues.put(field.getName(), field.getDouble(this));
+            } catch (IllegalAccessException e) {
+                e.printStackTrace();
+            }
+        return metricValues;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetrics.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetrics.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetrics.java
new file mode 100644
index 0000000..0b15d04
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/BinaryClassificationMetrics.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.selection.scoring.metric;
+
+import java.util.Iterator;
+import org.apache.ignite.ml.selection.scoring.LabelPair;
+
+/**
+ * Binary classification metrics calculator.
+ */
+public class BinaryClassificationMetrics {
+    /** Positive class label. */
+    private double positiveClsLb = 1.0;
+
+    /** Negative class label. Default value is 0.0. */
+    private double negativeClsLb;
+
+    /**
+     * Calculates binary metrics values.
+     *
+     * @param iter Iterator that supplies pairs of truth values and predicated.
+     * @return Scores for all binary metrics.
+     */
+    public BinaryClassificationMetricValues score(Iterator<LabelPair<Double>> iter) {
+        long tp = 0;
+        long tn = 0;
+        long fp = 0;
+        long fn = 0;
+
+        while (iter.hasNext()) {
+            LabelPair<Double> e = iter.next();
+
+            double prediction = e.getPrediction();
+            double truth = e.getTruth();
+
+            if (prediction != negativeClsLb && prediction != positiveClsLb)
+                throw new UnknownClassLabelException(prediction, positiveClsLb, negativeClsLb);
+            if (truth != negativeClsLb && truth != positiveClsLb)
+                throw new UnknownClassLabelException(truth, positiveClsLb, negativeClsLb);
+
+            if (truth == positiveClsLb && prediction == positiveClsLb) tp++;
+            else if (truth == positiveClsLb && prediction == negativeClsLb) fn++;
+            else if (truth == negativeClsLb && prediction == negativeClsLb) tn++;
+            else if (truth == negativeClsLb && prediction == positiveClsLb) fp++;
+        }
+
+        return new BinaryClassificationMetricValues(tp, tn, fp, fn);
+    }
+
+    /** */
+    public double positiveClsLb() {
+        return positiveClsLb;
+    }
+
+    /** */
+    public BinaryClassificationMetrics withPositiveClsLb(double positiveClsLb) {
+        this.positiveClsLb = positiveClsLb;
+        return this;
+    }
+
+    /** */
+    public double negativeClsLb() {
+        return negativeClsLb;
+    }
+
+    /** */
+    public BinaryClassificationMetrics withNegativeClsLb(double negativeClsLb) {
+        this.negativeClsLb = negativeClsLb;
+        return this;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/ClassMetric.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/ClassMetric.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/ClassMetric.java
new file mode 100644
index 0000000..f89e683
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/ClassMetric.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.selection.scoring.metric;
+
+/**
+ * Metric calculator for one class label.
+ *
+ * @param <L> Type of a label (truth or prediction).
+ */
+public abstract class ClassMetric<L> implements Metric<L> {
+    /** Class label. */
+    protected L clsLb;
+
+    /**
+     * The class of interest or positive class.
+     *
+     * @param clsLb The label.
+     */
+    public ClassMetric(L clsLb) {
+        this.clsLb = clsLb;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Fmeasure.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Fmeasure.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Fmeasure.java
index 1267584..fe36f51 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Fmeasure.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Fmeasure.java
@@ -25,9 +25,15 @@ import org.apache.ignite.ml.selection.scoring.LabelPair;
  *
  * @param <L> Type of a label (truth or prediction).
  */
-public class Fmeasure<L> implements Metric<L> {
-    /** Class label. */
-    private L clsLb;
+public class Fmeasure<L> extends ClassMetric<L> {
+    /**
+     * The class of interest or positive class.
+     *
+     * @param clsLb The label.
+     */
+    public Fmeasure(L clsLb) {
+        super(clsLb);
+    }
 
     /** {@inheritDoc} */
     @Override public double score(Iterator<LabelPair<L>> it) {
@@ -68,12 +74,8 @@ public class Fmeasure<L> implements Metric<L> {
             return Double.NaN;
     }
 
-    /**
-     * The class of interest or positive class.
-     *
-     * @param clsLb The label.
-     */
-    public Fmeasure(L clsLb) {
-        this.clsLb = clsLb;
+    /** {@inheritDoc} */
+    @Override public String name() {
+        return "F-measure for class with label " + clsLb;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Metric.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Metric.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Metric.java
index 60d1e41..783d7fc 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Metric.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Metric.java
@@ -33,4 +33,13 @@ public interface Metric<L> {
      * @return Score.
      */
     public double score(Iterator<LabelPair<L>> iter);
+
+    /**
+     * Returns the metric's name.
+     *
+     * NOTE: Should be unique to calculate multiple metrics correctly.
+     *
+     * @return String name representation.
+     */
+    public String name();
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Precision.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Precision.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Precision.java
index 0a583c8..482a027 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Precision.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Precision.java
@@ -25,9 +25,15 @@ import org.apache.ignite.ml.selection.scoring.LabelPair;
  *
  * @param <L> Type of a label (truth or prediction).
  */
-public class Precision<L> implements Metric<L> {
-    /** Class label. */
-    private L clsLb;
+public class Precision<L> extends ClassMetric<L> {
+    /**
+     * The class of interest or positive class.
+     *
+     * @param clsLb The label.
+     */
+    public Precision(L clsLb) {
+        super(clsLb);
+    }
 
     /** {@inheritDoc} */
     @Override public double score(Iterator<LabelPair<L>> it) {
@@ -59,12 +65,9 @@ public class Precision<L> implements Metric<L> {
             return Double.NaN;
     }
 
-    /**
-     * The class of interest or positive class.
-     *
-     * @param clsLb The label.
-     */
-    public Precision(L clsLb) {
-        this.clsLb = clsLb;
+    /** {@inheritDoc} */
+    @Override public String name() {
+        return "precision for class with label " + clsLb;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Recall.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Recall.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Recall.java
index 60324e7..d459e94 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Recall.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/Recall.java
@@ -25,9 +25,15 @@ import org.apache.ignite.ml.selection.scoring.LabelPair;
  *
  * @param <L> Type of a label (truth or prediction).
  */
-public class Recall<L> implements Metric<L> {
-    /** Class label. */
-    private L clsLb;
+public class Recall<L> extends ClassMetric<L> {
+    /**
+     * The class of interest or positive class.
+     *
+     * @param clsLb The label.
+     */
+    public Recall(L clsLb) {
+        super(clsLb);
+    }
 
     /** {@inheritDoc} */
     @Override public double score(Iterator<LabelPair<L>> it) {
@@ -59,12 +65,8 @@ public class Recall<L> implements Metric<L> {
             return Double.NaN;
     }
 
-    /**
-     * The class of interest or positive class.
-     *
-     * @param clsLb The label.
-     */
-    public Recall(L clsLb) {
-        this.clsLb = clsLb;
+    /** {@inheritDoc} */
+    @Override public String name() {
+        return "recall for class with label " + clsLb;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/UnknownClassLabelException.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/UnknownClassLabelException.java b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/UnknownClassLabelException.java
new file mode 100644
index 0000000..0531f2e
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/selection/scoring/metric/UnknownClassLabelException.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.selection.scoring.metric;
+
+import org.apache.ignite.IgniteException;
+
+/**
+ * Indicates an unknown class label for metric calculator.
+ */
+public class UnknownClassLabelException extends IgniteException {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+
+    /**
+     * @param incorrectVal Incorrect value.
+     * @param positiveClsLb Positive class label.
+     * @param negativeClsLb Negative class label.
+     */
+    public UnknownClassLabelException(double incorrectVal, double positiveClsLb, double negativeClsLb) {
+        super("The next class label: " + incorrectVal + " is not positive class label: " + positiveClsLb + " or negative class label: " + negativeClsLb);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2d6e436/modules/ml/src/test/java/org/apache/ignite/ml/selection/scoring/evaluator/EvaluatorTest.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/selection/scoring/evaluator/EvaluatorTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/selection/scoring/evaluator/EvaluatorTest.java
index 1abf7f0..f17ac73 100644
--- a/modules/ml/src/test/java/org/apache/ignite/ml/selection/scoring/evaluator/EvaluatorTest.java
+++ b/modules/ml/src/test/java/org/apache/ignite/ml/selection/scoring/evaluator/EvaluatorTest.java
@@ -52,7 +52,7 @@ import static org.apache.ignite.ml.TestUtils.testEnvBuilder;
 import static org.junit.Assert.assertArrayEquals;
 
 /**
- * Tests for {@link Evaluator} that require to start the whole Ignite infrastructure. IMPL NOTE based on
+ * Tests for {@link BinaryClassificationEvaluator} that require to start the whole Ignite infrastructure. IMPL NOTE based on
  * Step_8_CV_with_Param_Grid example.
  */
 public class EvaluatorTest extends GridCommonAbstractTest {
@@ -260,7 +260,7 @@ public class EvaluatorTest extends GridCommonAbstractTest {
                 lbExtractor
             );
 
-            actualAccuracy.set(Evaluator.evaluate(
+            actualAccuracy.set(BinaryClassificationEvaluator.evaluate(
                 cache,
                 split.getTestFilter(),
                 bestMdl,
@@ -269,7 +269,7 @@ public class EvaluatorTest extends GridCommonAbstractTest {
                 new Accuracy<>()
             ));
 
-            actualAccuracy2.set(Evaluator.evaluate(
+            actualAccuracy2.set(BinaryClassificationEvaluator.evaluate(
                 cache,
                 bestMdl,
                 preprocessor,


[46/52] [abbrv] ignite git commit: IGNITE-9893 IGNITE-1757 IGNITE-10723 Adding hibernate-5.3 module

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheStrategySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheStrategySelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheStrategySelfTest.java
new file mode 100644
index 0000000..e859284
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheStrategySelfTest.java
@@ -0,0 +1,570 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.cache.Cache;
+import javax.persistence.Cacheable;
+import javax.persistence.Id;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.hamcrest.core.Is;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.boot.Metadata;
+import org.hibernate.boot.MetadataSources;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.mapping.PersistentClass;
+import org.hibernate.mapping.RootClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.REGION_CACHE_PROPERTY;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cfg.AvailableSettings.USE_STRUCTURED_CACHE;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Tests Hibernate L2 cache configuration.
+ */
+@SuppressWarnings("unchecked")
+@RunWith(JUnit4.class)
+public class HibernateL2CacheStrategySelfTest extends GridCommonAbstractTest {
+    /** */
+    private static final String ENTITY1_NAME = Entity1.class.getName();
+
+    /** */
+    private static final String ENTITY2_NAME = Entity2.class.getName();
+
+    /** */
+    private static final String ENTITY3_NAME = Entity3.class.getName();
+
+    /** */
+    private static final String ENTITY4_NAME = Entity4.class.getName();
+
+    /** */
+    private static final String CONNECTION_URL = "jdbc:h2:mem:example;DB_CLOSE_DELAY=-1";
+
+    /** */
+    private SessionFactory sesFactory1;
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        startGrid(0);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        for (IgniteCacheProxy<?, ?> cache : ((IgniteKernal)grid(0)).caches())
+            cache.clear();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        ((TcpDiscoverySpi)cfg.getDiscoverySpi()).setIpFinder(new TcpDiscoveryVmIpFinder(true));
+
+        cfg.setCacheConfiguration(cacheConfiguration(ENTITY3_NAME),
+            cacheConfiguration(ENTITY4_NAME),
+            cacheConfiguration("cache1"),
+            cacheConfiguration("cache2"),
+            cacheConfiguration(DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME),
+            cacheConfiguration(DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME));
+
+        return cfg;
+    }
+
+    /**
+     * @param cacheName Cache name.
+     * @return Cache configuration.
+     */
+    private CacheConfiguration cacheConfiguration(String cacheName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+
+        cfg.setName(cacheName);
+        cfg.setCacheMode(PARTITIONED);
+        cfg.setAtomicityMode(TRANSACTIONAL);
+
+        return cfg;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testEntityCacheReadWrite() throws Exception {
+        for (AccessType accessType : new AccessType[]{AccessType.READ_WRITE, AccessType.NONSTRICT_READ_WRITE})
+            testEntityCacheReadWrite(accessType);
+    }
+
+    /**
+     * @param accessType Cache access type.
+     * @throws Exception If failed.
+     */
+    private void testEntityCacheReadWrite(AccessType accessType) throws Exception {
+        log.info("Test access type: " + accessType);
+
+        sesFactory1 = startHibernate(accessType, getTestIgniteInstanceName(0));
+
+        try {
+            // 1 Adding.
+            Session ses = sesFactory1.openSession();
+
+            try {
+                Transaction tr = ses.beginTransaction();
+
+                ses.save(new Entity1(1, "entity-1#name-1"));
+                ses.save(new Entity2(1, "entity-2#name-1"));
+
+                tr.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            loadEntities(sesFactory1);
+
+            assertEquals(1, grid(0).cache("cache1").size());
+            assertEquals(1, grid(0).cache("cache2").size());
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache1", 1), Is.is("entity-1#name-1"));
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache2", 1), Is.is("entity-2#name-1"));
+
+            // 2. Updating and adding.
+            ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity1 e1 = (Entity1)ses.load(Entity1.class, 1);
+
+                e1.setName("entity-1#name-1#UPDATED-1");
+
+                ses.update(e1);
+
+                ses.save(new Entity2(2, "entity-2#name-2#ADDED"));
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            loadEntities(sesFactory1);
+
+            assertEquals(1, grid(0).cache("cache1").size());
+            assertEquals(2, grid(0).cache("cache2").size());
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache1", 1), Is.is("entity-1#name-1#UPDATED-1"));
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache2", 1), Is.is("entity-2#name-1"));
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache2", 2), Is.is("entity-2#name-2#ADDED"));
+
+            // 3. Updating, adding, updating.
+            ses = sesFactory1.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                Entity2 e2_1 = (Entity2)ses.load(Entity2.class, 1);
+
+                e2_1.setName("entity-2#name-1#UPDATED-1");
+
+                ses.update(e2_1);
+
+                ses.save(new Entity1(2, "entity-1#name-2#ADDED"));
+
+                Entity1 e1_1 = (Entity1)ses.load(Entity1.class, 1);
+
+                e1_1.setName("entity-1#name-1#UPDATED-2");
+
+                ses.update(e1_1);
+
+                tx.commit();
+
+            }
+            finally {
+                ses.close();
+            }
+
+            loadEntities(sesFactory1);
+
+            assertEquals(2, grid(0).cache("cache1").size());
+            assertEquals(2, grid(0).cache("cache2").size());
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache2", 1), Is.is("entity-2#name-1#UPDATED-1"));
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache1", 2), Is.is("entity-1#name-2#ADDED"));
+            assertThat(getEntityNameFromRegion(sesFactory1, "cache1", 1), Is.is("entity-1#name-1#UPDATED-2"));
+
+            ses = sesFactory1.openSession();
+
+            sesFactory1.getStatistics().logSummary();
+
+            ses.close();
+        }
+        finally {
+            cleanup();
+        }
+    }
+
+    /**
+     * @param sesFactory Session factory.
+     */
+    private void loadEntities(SessionFactory sesFactory) {
+        Session ses = sesFactory.openSession();
+
+        try {
+            List<Entity1> list1 = ses.createCriteria(ENTITY1_NAME).list();
+
+            for (Entity1 e1 : list1)
+                assertNotNull(e1.getName());
+
+            List<Entity2> list2 = ses.createCriteria(ENTITY2_NAME).list();
+
+            for (Entity2 e2 : list2)
+                assertNotNull(e2.getName());
+        }
+        finally {
+            ses.close();
+        }
+    }
+
+    /**
+     * @param sesFactory Session Factory.
+     * @param regionName Region Name.
+     * @param id Id.
+     * @return Entity Name.
+     */
+    private String getEntityNameFromRegion(SessionFactory sesFactory, String regionName, int id) {
+        Session ses = sesFactory.openSession();
+
+        try {
+            for (Cache.Entry<Object, Object> entry : grid(0).cache(regionName)) {
+                if (((HibernateKeyWrapper)entry.getKey()).id().equals(id))
+                    return (String) ((HashMap) entry.getValue()).get("name");
+            }
+
+            return null;
+        }
+        finally {
+            ses.close();
+        }
+    }
+
+    /**
+     * @param accessType Cache access typr.
+     * @param igniteInstanceName Name of the grid providing caches.
+     * @return Session factory.
+     */
+    private SessionFactory startHibernate(AccessType accessType, String igniteInstanceName) {
+        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
+
+        builder.applySetting("hibernate.connection.url", CONNECTION_URL);
+
+        for (Map.Entry<String, String> e : HibernateL2CacheSelfTest.hibernateProperties(igniteInstanceName, accessType.name()).entrySet())
+            builder.applySetting(e.getKey(), e.getValue());
+
+        builder.applySetting(USE_STRUCTURED_CACHE, "true");
+        builder.applySetting(REGION_CACHE_PROPERTY + ENTITY1_NAME, "cache1");
+        builder.applySetting(REGION_CACHE_PROPERTY + ENTITY2_NAME, "cache2");
+        builder.applySetting(REGION_CACHE_PROPERTY + DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME);
+        builder.applySetting(REGION_CACHE_PROPERTY + DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME, DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME);
+
+        MetadataSources metadataSources = new MetadataSources(builder.build());
+
+        metadataSources.addAnnotatedClass(Entity1.class);
+        metadataSources.addAnnotatedClass(Entity2.class);
+        metadataSources.addAnnotatedClass(Entity3.class);
+        metadataSources.addAnnotatedClass(Entity4.class);
+
+        Metadata metadata = metadataSources.buildMetadata();
+
+        for (PersistentClass entityBinding : metadata.getEntityBindings()) {
+            if (!entityBinding.isInherited())
+                ((RootClass)entityBinding).setCacheConcurrencyStrategy(accessType.getExternalName());
+        }
+
+        return metadata.buildSessionFactory();
+    }
+
+    /**
+     * Test Hibernate entity1.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    public static class Entity1 {
+        /** */
+        private int id;
+
+        /** */
+        private String name;
+
+        /**
+         *
+         */
+        public Entity1() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param name Name.
+         */
+        Entity1(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    /**
+     * Test Hibernate entity2.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    public static class Entity2 {
+        /** */
+        private int id;
+
+        /** */
+        private String name;
+
+        /**
+         *
+         */
+        public Entity2() {
+           // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param name Name.
+         */
+        Entity2(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    /**
+     * Test Hibernate entity3.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    public static class Entity3 {
+        /** */
+        private int id;
+
+        /** */
+        private String name;
+
+        /**
+         *
+         */
+        public Entity3() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param name Name.
+         */
+        public Entity3(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    /**
+     * Test Hibernate entity4.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    public static class Entity4 {
+        /** */
+        private int id;
+
+        /** */
+        private String name;
+
+        /**
+         *
+         */
+        public Entity4() {
+            // No-op.
+        }
+
+        /**
+         * @param id ID.
+         * @param name Name.
+         */
+        public Entity4(int id, String name) {
+            this.id = id;
+            this.name = name;
+        }
+
+        /**
+         * @return ID.
+         */
+        @Id
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+
+        /**
+         * @return Name.
+         */
+        public String getName() {
+            return name;
+        }
+
+        /**
+         * @param name Name.
+         */
+        public void setName(String name) {
+            this.name = name;
+        }
+    }
+
+    /**
+     * Closes session factories and clears data from caches.
+     *
+     * @throws Exception If failed.
+     */
+    private void cleanup() throws Exception {
+        if (sesFactory1 != null)
+            sesFactory1.close();
+
+        sesFactory1 = null;
+
+        for (IgniteCacheProxy<?, ?> cache : ((IgniteKernal)grid(0)).caches())
+            cache.clear();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalSelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalSelfTest.java
new file mode 100644
index 0000000..5175292
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalSelfTest.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.util.Collections;
+import javax.cache.configuration.Factory;
+import javax.transaction.Synchronization;
+import javax.transaction.TransactionManager;
+import javax.transaction.UserTransaction;
+import org.apache.commons.dbcp.managed.BasicManagedDataSource;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.h2.jdbcx.JdbcDataSource;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cfg.Environment;
+import org.hibernate.engine.jdbc.connections.internal.DatasourceConnectionProviderImpl;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.transaction.jta.platform.internal.AbstractJtaPlatform;
+import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
+import org.hibernate.resource.transaction.backend.jta.internal.JtaTransactionCoordinatorBuilderImpl;
+import org.jetbrains.annotations.Nullable;
+import org.objectweb.jotm.Jotm;
+
+/**
+ *
+ * Tests Hibernate L2 cache with TRANSACTIONAL access mode (Hibernate and Cache are configured
+ * to used the same TransactionManager).
+ */
+public class HibernateL2CacheTransactionalSelfTest extends HibernateL2CacheSelfTest {
+    /** */
+    private static Jotm jotm;
+
+    /**
+     */
+    private static class TestJtaPlatform extends AbstractJtaPlatform {
+        /** {@inheritDoc} */
+        @Override protected TransactionManager locateTransactionManager() {
+            return jotm.getTransactionManager();
+        }
+
+        /** {@inheritDoc} */
+        @Override protected UserTransaction locateUserTransaction() {
+            return jotm.getUserTransaction();
+        }
+    }
+
+    /**
+     */
+    @SuppressWarnings("PublicInnerClass")
+    public static class TestTmFactory implements Factory<TransactionManager> {
+        /** */
+        private static final long serialVersionUID = 0;
+
+        /** {@inheritDoc} */
+        @Override public TransactionManager create() {
+            return jotm.getTransactionManager();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        jotm = new Jotm(true, false);
+
+        super.beforeTestsStarted();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        super.afterTestsStopped();
+
+        if (jotm != null)
+            jotm.stop();
+
+        jotm = null;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        cfg.getTransactionConfiguration().setTxManagerFactory(new TestTmFactory());
+        cfg.getTransactionConfiguration().setUseJtaSynchronization(useJtaSynchronization());
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected CacheConfiguration transactionalRegionConfiguration(String regionName) {
+        CacheConfiguration cfg = super.transactionalRegionConfiguration(regionName);
+
+        cfg.setNearConfiguration(null);
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override protected StandardServiceRegistryBuilder registryBuilder() {
+        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
+
+        DatasourceConnectionProviderImpl connProvider = new DatasourceConnectionProviderImpl();
+
+        BasicManagedDataSource dataSrc = new BasicManagedDataSource(); // JTA-aware data source.
+
+        dataSrc.setTransactionManager(jotm.getTransactionManager());
+
+        dataSrc.setDefaultAutoCommit(false);
+
+        JdbcDataSource h2DataSrc = new JdbcDataSource();
+
+        h2DataSrc.setURL(CONNECTION_URL);
+
+        dataSrc.setXaDataSourceInstance(h2DataSrc);
+
+        connProvider.setDataSource(dataSrc);
+
+        connProvider.configure(Collections.emptyMap());
+
+        builder.addService(ConnectionProvider.class, connProvider);
+
+        builder.addService(JtaPlatform.class, new TestJtaPlatform());
+
+        builder.applySetting(Environment.TRANSACTION_COORDINATOR_STRATEGY, JtaTransactionCoordinatorBuilderImpl.class.getName());
+
+        return builder;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected AccessType[] accessTypes() {
+        return new AccessType[]{AccessType.TRANSACTIONAL};
+    }
+
+    /**
+     * @return Whether to use {@link Synchronization}.
+     */
+    protected boolean useJtaSynchronization() {
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalUseSyncSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalUseSyncSelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalUseSyncSelfTest.java
new file mode 100644
index 0000000..44899f9
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheTransactionalUseSyncSelfTest.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import javax.transaction.Synchronization;
+
+/**
+ * Tests Hibernate L2 cache with TRANSACTIONAL access mode and {@link Synchronization}
+ * instead of XA resource.
+ */
+public class HibernateL2CacheTransactionalUseSyncSelfTest extends HibernateL2CacheTransactionalSelfTest {
+    /** {@inheritDoc} */
+    @Override protected boolean useJtaSynchronization() {
+        return true;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreNodeRestartTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreNodeRestartTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreNodeRestartTest.java
new file mode 100644
index 0000000..d5496af
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreNodeRestartTest.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import org.apache.ignite.cache.CacheAtomicityMode;
+import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.configuration.NearCacheConfiguration;
+import org.apache.ignite.internal.processors.cache.integration.IgniteCacheStoreNodeRestartAbstractTest;
+
+public class CacheHibernateBlobStoreNodeRestartTest extends IgniteCacheStoreNodeRestartAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected CacheStore getStore() {
+        return new CacheHibernateBlobStore();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected CacheMode cacheMode() {
+        return CacheMode.PARTITIONED;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected CacheAtomicityMode atomicityMode() {
+        return CacheAtomicityMode.ATOMIC;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected NearCacheConfiguration nearConfiguration() {
+        return null;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
new file mode 100644
index 0000000..8b75bb7
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import java.io.File;
+import java.net.URL;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.testframework.junits.cache.GridAbstractCacheStoreSelfTest;
+import org.hibernate.FlushMode;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.resource.transaction.spi.TransactionStatus;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Cache store test.
+ */
+@RunWith(JUnit4.class)
+public class CacheHibernateBlobStoreSelfTest extends
+    GridAbstractCacheStoreSelfTest<CacheHibernateBlobStore<Object, Object>> {
+    /**
+     * @throws Exception If failed.
+     */
+    public CacheHibernateBlobStoreSelfTest() throws Exception {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        super.afterTest();
+
+        Session s = store.session(null);
+
+        if (s == null)
+            return;
+
+        try {
+            s.createQuery("delete from " + CacheHibernateBlobStoreEntry.class.getSimpleName())
+                    .setFlushMode(FlushMode.ALWAYS).executeUpdate();
+
+            Transaction hTx = s.getTransaction();
+
+            if (hTx != null && hTx.getStatus() == TransactionStatus.ACTIVE)
+                hTx.commit();
+        }
+        finally {
+            s.close();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override protected CacheHibernateBlobStore<Object, Object> store() {
+        return new CacheHibernateBlobStore<>();
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testConfigurationByUrl() throws Exception {
+        URL url = U.resolveIgniteUrl(CacheHibernateStoreFactorySelfTest.MODULE_PATH +
+            "/src/test/resources/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml");
+
+        assert url != null;
+
+        store.setHibernateConfigurationPath(url.toString());
+
+        // Store will be implicitly initialized.
+        store.load("key");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testConfigurationByFile() throws Exception {
+        URL url = U.resolveIgniteUrl(CacheHibernateStoreFactorySelfTest.MODULE_PATH +
+                "/src/test/resources/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml");
+
+        assert url != null;
+
+        File file = new File(url.toURI());
+
+        store.setHibernateConfigurationPath(file.getAbsolutePath());
+
+        // Store will be implicitly initialized.
+        store.load("key");
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testConfigurationByResource() throws Exception {
+        store.setHibernateConfigurationPath("/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml");
+
+        // Store will be implicitly initialized.
+        store.load("key");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
new file mode 100644
index 0000000..0a9a881
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
@@ -0,0 +1,336 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import java.sql.Connection;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.Callable;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.persistence.EntityGraph;
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceUnitUtil;
+import javax.persistence.Query;
+import javax.persistence.SynchronizationType;
+import javax.persistence.criteria.CriteriaBuilder;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.hibernate.Cache;
+import org.hibernate.HibernateException;
+import org.hibernate.Metamodel;
+import org.hibernate.Session;
+import org.hibernate.SessionBuilder;
+import org.hibernate.SessionFactory;
+import org.hibernate.StatelessSession;
+import org.hibernate.StatelessSessionBuilder;
+import org.hibernate.TypeHelper;
+import org.hibernate.boot.spi.SessionFactoryOptions;
+import org.hibernate.engine.spi.FilterDefinition;
+import org.hibernate.metadata.ClassMetadata;
+import org.hibernate.metadata.CollectionMetadata;
+import org.hibernate.stat.Statistics;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Test for Cache jdbc blob store factory.
+ */
+@RunWith(JUnit4.class)
+public class CacheHibernateStoreFactorySelfTest extends GridCommonAbstractTest {
+    /** Cache name. */
+    private static final String CACHE_NAME = "test";
+
+    /** */
+    static final String MODULE_PATH = "modules/hibernate-5.3/";
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testCacheConfiguration() throws Exception {
+        try (Ignite ignite1 = startGrid(0)) {
+            IgniteCache<Integer, String> cache1 = ignite1.getOrCreateCache(cacheConfiguration());
+
+            checkStore(cache1);
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testXmlConfiguration() throws Exception {
+        try (Ignite ignite = Ignition.start(MODULE_PATH + "/src/test/config/factory-cache.xml")) {
+            try(Ignite ignite1 = Ignition.start(MODULE_PATH + "/src/test/config/factory-cache1.xml")) {
+                checkStore(ignite.<Integer, String>cache(CACHE_NAME), DummySessionFactoryExt.class);
+
+                checkStore(ignite1.<Integer, String>cache(CACHE_NAME), DummySessionFactory.class);
+            }
+        }
+    }
+
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testIncorrectBeanConfiguration() {
+        GridTestUtils.assertThrows(log, new Callable<Object>() {
+            @Override
+            public Object call() throws Exception {
+                String path = MODULE_PATH + "/src/test/config/factory-incorrect-store-cache.xml";
+                try (Ignite ignite = Ignition.start(path)) {
+                    ignite.cache(CACHE_NAME).getConfiguration(CacheConfiguration.class).getCacheStoreFactory().create();
+                }
+                return null;
+            }
+        }, IgniteException.class, "Failed to load bean in application context");
+    }
+
+    /**
+     * @return Cache configuration with store.
+     */
+    private CacheConfiguration<Integer, String> cacheConfiguration() {
+        CacheConfiguration<Integer, String> cfg = new CacheConfiguration<>(DEFAULT_CACHE_NAME);
+
+        CacheHibernateBlobStoreFactory<Integer, String> factory = new CacheHibernateBlobStoreFactory();
+
+        factory.setHibernateConfigurationPath("/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml");
+
+        cfg.setCacheStoreFactory(factory);
+
+        return cfg;
+    }
+
+    /**
+     * @param cache Ignite cache.
+     * @param dataSrcClass Data source class.
+     * @throws Exception If store parameters is not the same as in configuration xml.
+     */
+    private void checkStore(IgniteCache<Integer, String> cache, Class<?> dataSrcClass) throws Exception {
+        CacheHibernateBlobStore store = (CacheHibernateBlobStore)cache
+            .getConfiguration(CacheConfiguration.class).getCacheStoreFactory().create();
+
+        assertEquals(dataSrcClass,
+            GridTestUtils.getFieldValue(store, CacheHibernateBlobStore.class, "sesFactory").getClass());
+    }
+
+    /**
+     * @param cache Ignite cache.
+     * @throws Exception If store parameters is not the same as in configuration xml.
+     */
+    private void checkStore(IgniteCache<Integer, String> cache) throws Exception {
+        CacheHibernateBlobStore store = (CacheHibernateBlobStore)cache.getConfiguration(CacheConfiguration.class)
+            .getCacheStoreFactory().create();
+
+        assertEquals("/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml",
+            GridTestUtils.getFieldValue(store, CacheHibernateBlobStore.class, "hibernateCfgPath"));
+    }
+
+    /**
+     *
+     */
+    public static class DummySessionFactoryExt extends DummySessionFactory {
+        /** */
+        public DummySessionFactoryExt() {
+            // No-op.
+        }
+    }
+
+    /**
+     *
+     */
+    public static class DummySessionFactory implements SessionFactory {
+        /** {@inheritDoc} */
+        @Override public SessionFactoryOptions getSessionFactoryOptions() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public SessionBuilder withOptions() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Session openSession() throws HibernateException {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Session getCurrentSession() throws HibernateException {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public StatelessSessionBuilder withStatelessOptions() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public StatelessSession openStatelessSession() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public StatelessSession openStatelessSession(Connection conn) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public ClassMetadata getClassMetadata(Class entityCls) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public ClassMetadata getClassMetadata(String entityName) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public CollectionMetadata getCollectionMetadata(String roleName) {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Map<String, ClassMetadata> getAllClassMetadata() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Map getAllCollectionMetadata() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Statistics getStatistics() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void close() throws HibernateException {
+        }
+
+        @Override
+        public Map<String, Object> getProperties() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean isClosed() {
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Cache getCache() {
+            return null;
+        }
+
+        @Override
+        public PersistenceUnitUtil getPersistenceUnitUtil() {
+            return null;
+        }
+
+        @Override
+        public void addNamedQuery(String name, Query query) {
+
+        }
+
+        @Override
+        public <T> T unwrap(Class<T> cls) {
+            return null;
+        }
+
+        @Override
+        public <T> void addNamedEntityGraph(String graphName, EntityGraph<T> entityGraph) {
+
+        }
+
+        /** {@inheritDoc} */
+        @Override public Set getDefinedFilterNames() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public FilterDefinition getFilterDefinition(String filterName) throws HibernateException {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean containsFetchProfileDefinition(String name) {
+            return false;
+        }
+
+        /** {@inheritDoc} */
+        @Override public TypeHelper getTypeHelper() {
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public Reference getReference() throws NamingException {
+            return null;
+        }
+
+        @Override
+        public <T> List<EntityGraph<? super T>> findEntityGraphsByType(Class<T> aClass) {
+            return null;
+        }
+
+        @Override
+        public EntityManager createEntityManager() {
+            return null;
+        }
+
+        @Override
+        public EntityManager createEntityManager(Map map) {
+            return null;
+        }
+
+        @Override
+        public EntityManager createEntityManager(SynchronizationType synchronizationType) {
+            return null;
+        }
+
+        @Override
+        public EntityManager createEntityManager(SynchronizationType synchronizationType, Map map) {
+            return null;
+        }
+
+        @Override
+        public CriteriaBuilder getCriteriaBuilder() {
+            return null;
+        }
+
+        @Override
+        public Metamodel getMetamodel() {
+            return null;
+        }
+
+        @Override
+        public boolean isOpen() {
+            return false;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListenerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListenerSelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListenerSelfTest.java
new file mode 100644
index 0000000..0010425
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListenerSelfTest.java
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import java.io.Serializable;
+import java.util.Map;
+import javax.cache.Cache;
+import javax.cache.configuration.Factory;
+import javax.cache.integration.CacheLoaderException;
+import javax.cache.integration.CacheWriterException;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.cache.store.CacheStoreAdapter;
+import org.apache.ignite.cache.store.CacheStoreSession;
+import org.apache.ignite.cache.store.CacheStoreSessionListener;
+import org.apache.ignite.cache.store.CacheStoreSessionListenerAbstractSelfTest;
+import org.apache.ignite.cache.store.jdbc.CacheJdbcStoreSessionListener;
+import org.apache.ignite.lang.IgniteBiInClosure;
+import org.apache.ignite.resources.CacheStoreSessionResource;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.resource.transaction.spi.TransactionStatus;
+
+/**
+ * Tests for {@link CacheJdbcStoreSessionListener}.
+ */
+public class CacheHibernateStoreSessionListenerSelfTest extends CacheStoreSessionListenerAbstractSelfTest {
+    /** {@inheritDoc} */
+    @Override protected Factory<? extends CacheStore<Integer, Integer>> storeFactory() {
+        return new Factory<CacheStore<Integer, Integer>>() {
+            @Override public CacheStore<Integer, Integer> create() {
+                return new Store();
+            }
+        };
+    }
+
+    /** {@inheritDoc} */
+    @Override protected Factory<CacheStoreSessionListener> sessionListenerFactory() {
+        return new Factory<CacheStoreSessionListener>() {
+            @Override public CacheStoreSessionListener create() {
+                CacheHibernateStoreSessionListener lsnr = new CacheHibernateStoreSessionListener();
+
+                SessionFactory sesFactory = new Configuration().
+                    setProperty("hibernate.connection.url", URL).
+                    addAnnotatedClass(Table1.class).
+                    addAnnotatedClass(Table2.class).
+                    buildSessionFactory();
+
+                lsnr.setSessionFactory(sesFactory);
+
+                return lsnr;
+            }
+        };
+    }
+
+    /**
+     */
+    private static class Store extends CacheStoreAdapter<Integer, Integer> {
+        /** */
+        private static String SES_CONN_KEY = "ses_conn";
+
+        /** */
+        @CacheStoreSessionResource
+        private CacheStoreSession ses;
+
+        /** {@inheritDoc} */
+        @Override public void loadCache(IgniteBiInClosure<Integer, Integer> clo, Object... args) {
+            loadCacheCnt.incrementAndGet();
+
+            checkSession();
+        }
+
+        /** {@inheritDoc} */
+        @Override public Integer load(Integer key) throws CacheLoaderException {
+            loadCnt.incrementAndGet();
+
+            checkSession();
+
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void write(Cache.Entry<? extends Integer, ? extends Integer> entry)
+            throws CacheWriterException {
+            writeCnt.incrementAndGet();
+
+            checkSession();
+
+            if (write.get()) {
+                Session hibSes = ses.attachment();
+
+                switch (ses.cacheName()) {
+                    case "cache1":
+                        hibSes.save(new Table1(entry.getKey(), entry.getValue()));
+
+                        break;
+
+                    case "cache2":
+                        if (fail.get())
+                            throw new CacheWriterException("Expected failure.");
+
+                        hibSes.save(new Table2(entry.getKey(), entry.getValue()));
+
+                        break;
+
+                    default:
+                        throw new CacheWriterException("Wring cache: " + ses.cacheName());
+                }
+            }
+        }
+
+        /** {@inheritDoc} */
+        @Override public void delete(Object key) throws CacheWriterException {
+            deleteCnt.incrementAndGet();
+
+            checkSession();
+        }
+
+        /** {@inheritDoc} */
+        @Override public void sessionEnd(boolean commit) {
+            assertNull(ses.attachment());
+        }
+
+        /**
+         */
+        private void checkSession() {
+            Session hibSes = ses.attachment();
+
+            assertNotNull(hibSes);
+
+            assertTrue(hibSes.isOpen());
+
+            Transaction tx = hibSes.getTransaction();
+
+            assertNotNull(tx);
+
+            if (ses.isWithinTransaction())
+                assertEquals(TransactionStatus.ACTIVE, tx.getStatus());
+            else
+                assertFalse("Unexpected status: " + tx.getStatus(), tx.getStatus() == TransactionStatus.ACTIVE);
+
+            verifySameInstance(hibSes);
+        }
+
+        /**
+         * @param hibSes Session.
+         */
+        private void verifySameInstance(Session hibSes) {
+            Map<String, Session> props = ses.properties();
+
+            Session sesConn = props.get(SES_CONN_KEY);
+
+            if (sesConn == null)
+                props.put(SES_CONN_KEY, hibSes);
+            else {
+                assertSame(hibSes, sesConn);
+
+                reuseCnt.incrementAndGet();
+            }
+        }
+    }
+
+    /**
+     */
+    @Entity
+    @Table(name = "Table1")
+    private static class Table1 implements Serializable {
+        /** */
+        @Id
+        @GeneratedValue(strategy = GenerationType.IDENTITY)
+        @Column(name = "id")
+        private Integer id;
+
+        /** */
+        @Column(name = "key")
+        private int key;
+
+        /** */
+        @Column(name = "value")
+        private int value;
+
+        /**
+         * @param key Key.
+         * @param value Value.
+         */
+        private Table1(int key, int value) {
+            this.key = key;
+            this.value = value;
+        }
+    }
+
+    /**
+     */
+    @Entity
+    @Table(name = "Table2")
+    private static class Table2 implements Serializable {
+        /** */
+        @Id
+        @GeneratedValue(strategy = GenerationType.IDENTITY)
+        @Column(name = "id")
+        private Integer id;
+
+        /** */
+        @Column(name = "key")
+        private int key;
+
+        /** */
+        @Column(name = "value")
+        private int value;
+
+        /**
+         * @param key Key.
+         * @param value Value.
+         */
+        private Table2(int key, int value) {
+            this.key = key;
+            this.value = value;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml
new file mode 100644
index 0000000..6240599
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+    <session-factory>
+        <!-- Show SQL. -->
+        <property name="show_sql">true</property>
+
+        <!-- Database connection settings (private in-memory database). -->
+        <property name="connection.url">jdbc:h2:mem:example;DB_CLOSE_DELAY=-1</property>
+
+        <!-- Only validate the database schema on startup in production mode. -->
+        <property name="hbm2ddl.auto">update</property>
+
+        <!-- H2 dialect. -->
+        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
+
+        <!-- Mappings. -->
+        <mapping resource="org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml"/>
+    </session-factory>
+</hibernate-configuration>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/package-info.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/package-info.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/package-info.java
new file mode 100644
index 0000000..8af9886
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/store/hibernate/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Contains internal tests or test related classes and interfaces.
+ */
+package org.apache.ignite.cache.store.hibernate;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteBinaryHibernate53TestSuite.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteBinaryHibernate53TestSuite.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteBinaryHibernate53TestSuite.java
new file mode 100644
index 0000000..51842a8
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteBinaryHibernate53TestSuite.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.testsuites;
+
+import junit.framework.TestSuite;
+import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.testframework.config.GridTestProperties;
+
+/**
+ *
+ */
+public class IgniteBinaryHibernate53TestSuite extends TestSuite {
+    /**
+     * @return Test suite.
+     * @throws Exception If failed.
+     */
+    public static TestSuite suite() throws Exception {
+        GridTestProperties.setProperty(GridTestProperties.MARSH_CLASS_NAME, BinaryMarshaller.class.getName());
+
+        return IgniteHibernate53TestSuite.suite();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteHibernate53TestSuite.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteHibernate53TestSuite.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteHibernate53TestSuite.java
new file mode 100644
index 0000000..794cffe
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/testsuites/IgniteHibernate53TestSuite.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.testsuites;
+
+import junit.framework.JUnit4TestAdapter;
+import junit.framework.TestSuite;
+import org.apache.ignite.cache.hibernate.HibernateL2CacheConfigurationSelfTest;
+import org.apache.ignite.cache.hibernate.HibernateL2CacheMultiJvmTest;
+import org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest;
+import org.apache.ignite.cache.hibernate.HibernateL2CacheStrategySelfTest;
+import org.apache.ignite.cache.hibernate.HibernateL2CacheTransactionalSelfTest;
+import org.apache.ignite.cache.hibernate.HibernateL2CacheTransactionalUseSyncSelfTest;
+import org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreNodeRestartTest;
+import org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreSelfTest;
+import org.apache.ignite.cache.store.hibernate.CacheHibernateStoreFactorySelfTest;
+import org.apache.ignite.cache.store.hibernate.CacheHibernateStoreSessionListenerSelfTest;
+
+/**
+ * Hibernate integration tests.
+ */
+public class IgniteHibernate53TestSuite extends TestSuite {
+    /**
+     * @return Test suite.
+     */
+    public static TestSuite suite() {
+        TestSuite suite = new TestSuite("Hibernate5 Integration Test Suite");
+
+        // Hibernate L2 cache.
+        suite.addTest(new JUnit4TestAdapter(HibernateL2CacheSelfTest.class));
+        suite.addTest(new JUnit4TestAdapter(HibernateL2CacheTransactionalSelfTest.class));
+        suite.addTest(new JUnit4TestAdapter(HibernateL2CacheTransactionalUseSyncSelfTest.class));
+        suite.addTest(new JUnit4TestAdapter(HibernateL2CacheConfigurationSelfTest.class));
+        suite.addTest(new JUnit4TestAdapter(HibernateL2CacheStrategySelfTest.class));
+        suite.addTest(new JUnit4TestAdapter(HibernateL2CacheMultiJvmTest.class));
+
+        suite.addTest(new JUnit4TestAdapter(CacheHibernateBlobStoreSelfTest.class));
+
+        suite.addTest(new JUnit4TestAdapter(CacheHibernateBlobStoreNodeRestartTest.class));
+
+        suite.addTest(new JUnit4TestAdapter(CacheHibernateStoreSessionListenerSelfTest.class));
+
+        suite.addTest(new JUnit4TestAdapter(CacheHibernateStoreFactorySelfTest.class));
+
+        return suite;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/resources/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/resources/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml b/modules/hibernate-5.3/src/test/resources/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml
new file mode 100644
index 0000000..6240599
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/resources/org/apache/ignite/cache/store/hibernate/hibernate.cfg.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+
+<!DOCTYPE hibernate-configuration PUBLIC
+        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
+        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
+
+<hibernate-configuration>
+    <session-factory>
+        <!-- Show SQL. -->
+        <property name="show_sql">true</property>
+
+        <!-- Database connection settings (private in-memory database). -->
+        <property name="connection.url">jdbc:h2:mem:example;DB_CLOSE_DELAY=-1</property>
+
+        <!-- Only validate the database schema on startup in production mode. -->
+        <property name="hbm2ddl.auto">update</property>
+
+        <!-- H2 dialect. -->
+        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
+
+        <!-- Mappings. -->
+        <mapping resource="org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml"/>
+    </session-factory>
+</hibernate-configuration>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.java
index 557b018..44edf8e 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyAdapter.java
@@ -100,7 +100,8 @@ public abstract class HibernateAccessStrategyAdapter {
      * @param cache Cache.
      * @param eConverter Exception converter.
      */
-    protected HibernateAccessStrategyAdapter(Ignite ignite,
+    protected HibernateAccessStrategyAdapter(
+        Ignite ignite,
         HibernateCacheProxy cache,
         HibernateExceptionConverter eConverter) {
         this.cache = cache;
@@ -124,7 +125,12 @@ public abstract class HibernateAccessStrategyAdapter {
      */
     @Nullable public Object get(Object key) {
         try {
-            return cache.get(key);
+            Object val = cache.get(key);
+
+            if (log.isDebugEnabled())
+                log.debug("Get [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+
+            return val;
         }
         catch (IgniteCheckedException e) {
             throw convertException(e);
@@ -147,6 +153,9 @@ public abstract class HibernateAccessStrategyAdapter {
      * @param val Value.
      */
     public void putFromLoad(Object key, Object val) {
+        if (log.isDebugEnabled())
+            log.debug("Put from load [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+
         try {
             cache.put(key, val);
         }
@@ -225,6 +234,9 @@ public abstract class HibernateAccessStrategyAdapter {
      * Called to remove all data from cache without regard to transaction.
      */
     public void evictAll() {
+        if (log.isDebugEnabled())
+            log.debug("Evict all [cache=" + cache.name() + ']');
+
         try {
             evictAll(cache);
         }
@@ -337,4 +349,4 @@ public abstract class HibernateAccessStrategyAdapter {
             cacheName = U.readString(in);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.java
index 0226c1c..c48d482 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateAccessStrategyFactory.java
@@ -19,8 +19,9 @@ package org.apache.ignite.cache.hibernate;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Supplier;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
@@ -54,9 +55,6 @@ public class HibernateAccessStrategyFactory {
     /** Hibernate L2 cache Ignite instance name property name. */
     public static final String IGNITE_INSTANCE_NAME_PROPERTY = "org.apache.ignite.hibernate.ignite_instance_name";
 
-    /** Default cache property name. */
-    public static final String DFLT_CACHE_NAME_PROPERTY = "org.apache.ignite.hibernate.default_cache";
-
     /** Property prefix used to specify region name to cache name mapping. */
     public static final String REGION_CACHE_PROPERTY = "org.apache.ignite.hibernate.region_cache.";
 
@@ -66,13 +64,16 @@ public class HibernateAccessStrategyFactory {
     /** */
     public static final String GRID_CONFIG_PROPERTY = "org.apache.ignite.hibernate.grid_config";
 
+    /** Disable atomicity check when caches are created lazily. */
+    public static final String VERIFY_ATOMICITY = "org.apache.ignite.hibernate.verify_atomicity";
+
+    /** When set, all cache names in ignite will be fetched using the specified prefix. */
+    public static final String CACHE_PREFIX = "org.apache.ignite.hibernate.cache_prefix";
+
     /** Grid providing caches. */
     private Ignite ignite;
 
-    /** Default cache. */
-    private HibernateCacheProxy dfltCache;
-
-    /** Region name to cache name mapping. */
+    /** Region name to cache name (without prefix) mapping. */
     private final Map<String, String> regionCaches = new HashMap<>();
 
     /** */
@@ -81,6 +82,12 @@ public class HibernateAccessStrategyFactory {
     /** */
     private final ConcurrentHashMap<String, ThreadLocal> threadLocMap = new ConcurrentHashMap<>();
 
+    /** */
+    private String cachePrefix;
+
+    /** */
+    private boolean verifyAtomicity = true;
+
     /**
      * @param keyTransformer Key transformer.
      * @param eConverter Exception converter.
@@ -91,53 +98,45 @@ public class HibernateAccessStrategyFactory {
     }
 
     /**
-     * @param props Properties.
+     * @param cfgValues {@link Map} of config values.
      */
-    public void start(Properties props)  {
-        String gridCfg = props.getProperty(GRID_CONFIG_PROPERTY);
-        String igniteInstanceName = props.getProperty(IGNITE_INSTANCE_NAME_PROPERTY);
+    public void start(Map<Object, Object> cfgValues)  {
+        cachePrefix = cfgValues.getOrDefault(CACHE_PREFIX, "").toString();
+
+        verifyAtomicity = Boolean.valueOf(cfgValues.getOrDefault(VERIFY_ATOMICITY, verifyAtomicity).toString());
 
-        if (igniteInstanceName == null)
-            igniteInstanceName = props.getProperty(GRID_NAME_PROPERTY);
+        Object gridCfg = cfgValues.get(GRID_CONFIG_PROPERTY);
+
+        Object igniteInstanceName = cfgValues.get(IGNITE_INSTANCE_NAME_PROPERTY);
 
         if (gridCfg != null) {
             try {
-                ignite = G.start(gridCfg);
+                ignite = G.start(gridCfg.toString());
             }
             catch (IgniteException e) {
                 throw eConverter.convert(e);
             }
         }
         else
-            ignite = Ignition.ignite(igniteInstanceName);
+            ignite = Ignition.ignite(igniteInstanceName == null ? null : igniteInstanceName.toString());
 
-        for (Map.Entry<Object, Object> prop : props.entrySet()) {
-            String key = prop.getKey().toString();
+        for (Map.Entry entry : cfgValues.entrySet()) {
+            String key = entry.getKey().toString();
 
             if (key.startsWith(REGION_CACHE_PROPERTY)) {
                 String regionName = key.substring(REGION_CACHE_PROPERTY.length());
 
-                String cacheName = prop.getValue().toString();
+                String cacheName = entry.getValue().toString();
 
-                if (((IgniteKernal)ignite).getCache(cacheName) == null)
+                if (((IgniteKernal) ignite).getCache(cachePrefix + cacheName) == null) {
                     throw new IllegalArgumentException("Cache '" + cacheName + "' specified for region '" + regionName + "' " +
                         "is not configured.");
+                }
 
                 regionCaches.put(regionName, cacheName);
             }
         }
 
-        String dfltCacheName = props.getProperty(DFLT_CACHE_NAME_PROPERTY);
-
-        if (dfltCacheName != null) {
-            IgniteInternalCache<Object, Object> dfltCache = ((IgniteKernal)ignite).getCache(dfltCacheName);
-
-            if (dfltCache == null)
-                throw new IllegalArgumentException("Cache specified as default is not configured: " + dfltCacheName);
-
-            this.dfltCache = new HibernateCacheProxy(dfltCache, keyTransformer);
-        }
-
         IgniteLogger log = ignite.log().getLogger(getClass());
 
         if (log.isDebugEnabled())
@@ -158,19 +157,48 @@ public class HibernateAccessStrategyFactory {
     HibernateCacheProxy regionCache(String regionName) {
         String cacheName = regionCaches.get(regionName);
 
-        if (cacheName == null) {
-            if (dfltCache != null)
-                return dfltCache;
-
+        if (cacheName == null)
             cacheName = regionName;
+
+        cacheName = cachePrefix + cacheName;
+
+        Supplier<IgniteInternalCache<Object, Object>> lazyCache = new LazyCacheSupplier(cacheName, regionName);
+
+        return new HibernateCacheProxy(cacheName, lazyCache, keyTransformer);
+    }
+
+    /** */
+    private class LazyCacheSupplier implements Supplier<IgniteInternalCache<Object, Object>> {
+        /** */
+        private final AtomicReference<IgniteInternalCache<Object, Object>> reference = new AtomicReference<>();
+
+        /** */
+        private final String cacheName;
+
+        /** */
+        private final String regionName;
+
+        /** */
+        private LazyCacheSupplier(String cacheName, String regionName) {
+            this.cacheName = cacheName;
+            this.regionName = regionName;
         }
 
-        IgniteInternalCache<Object, Object> cache = ((IgniteKernal)ignite).getCache(cacheName);
+        /** {@inheritDoc} */
+        @Override public IgniteInternalCache<Object, Object> get() {
+            IgniteInternalCache<Object, Object> cache = reference.get();
 
-        if (cache == null)
-            throw new IllegalArgumentException("Cache '" + cacheName + "' for region '" + regionName + "' is not configured.");
+            if (cache == null) {
+                cache = ((IgniteKernal)ignite).getCache(cacheName);
 
-        return new HibernateCacheProxy(cache, keyTransformer);
+                if (cache == null)
+                    throw new IllegalArgumentException("Cache '" + cacheName + "' for region '" + regionName + "' is not configured.");
+
+                reference.compareAndSet(null, cache);
+            }
+
+            return cache;
+        }
     }
 
     /**
@@ -203,9 +231,12 @@ public class HibernateAccessStrategyFactory {
      * @return Access strategy implementation.
      */
     HibernateAccessStrategyAdapter createReadWriteStrategy(HibernateCacheProxy cache) {
-        if (cache.configuration().getAtomicityMode() != TRANSACTIONAL)
-            throw new IllegalArgumentException("Hibernate READ-WRITE access strategy must have Ignite cache with " +
-                "'TRANSACTIONAL' atomicity mode: " + cache.name());
+        if (verifyAtomicity) {
+            if (cache.configuration().getAtomicityMode() != TRANSACTIONAL) {
+                throw new IllegalArgumentException("Hibernate READ-WRITE access strategy must have Ignite cache with " +
+                    "'TRANSACTIONAL' atomicity mode: " + cache.name());
+            }
+        }
 
         return new HibernateReadWriteAccessStrategy(ignite, cache, threadLoc, eConverter);
     }
@@ -215,19 +246,22 @@ public class HibernateAccessStrategyFactory {
      * @return Access strategy implementation.
      */
     HibernateAccessStrategyAdapter createTransactionalStrategy(HibernateCacheProxy cache) {
-        if (cache.configuration().getAtomicityMode() != TRANSACTIONAL)
-            throw new IllegalArgumentException("Hibernate TRANSACTIONAL access strategy must have Ignite cache with " +
-                "'TRANSACTIONAL' atomicity mode: " + cache.name());
-
-        TransactionConfiguration txCfg = ignite.configuration().getTransactionConfiguration();
-
-        if (txCfg == null ||
-            (txCfg.getTxManagerFactory() == null
-                && txCfg.getTxManagerLookupClassName() == null
-                && cache.configuration().getTransactionManagerLookupClassName() == null)) {
-            throw new IllegalArgumentException("Hibernate TRANSACTIONAL access strategy must have Ignite with " +
-                "Factory<TransactionManager> configured (see IgniteConfiguration." +
-                "getTransactionConfiguration().setTxManagerFactory()): " + cache.name());
+        if (verifyAtomicity) {
+            if (cache.configuration().getAtomicityMode() != TRANSACTIONAL) {
+                throw new IllegalArgumentException("Hibernate TRANSACTIONAL access strategy must have Ignite cache with " +
+                    "'TRANSACTIONAL' atomicity mode: " + cache.name());
+            }
+
+            TransactionConfiguration txCfg = ignite.configuration().getTransactionConfiguration();
+
+            if (txCfg == null ||
+                (txCfg.getTxManagerFactory() == null
+                    && txCfg.getTxManagerLookupClassName() == null
+                    && cache.configuration().getTransactionManagerLookupClassName() == null)) {
+                throw new IllegalArgumentException("Hibernate TRANSACTIONAL access strategy must have Ignite with " +
+                    "Factory<TransactionManager> configured (see IgniteConfiguration." +
+                    "getTransactionConfiguration().setTxManagerFactory()): " + cache.name());
+            }
         }
 
         return new HibernateTransactionalAccessStrategy(ignite, cache, eConverter);


[04/52] [abbrv] ignite git commit: IGNITE-10701 Add missing import to CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest - Fixes #5674.

Posted by sb...@apache.org.
IGNITE-10701 Add missing import to CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest - Fixes #5674.

Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/cde6caee
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/cde6caee
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/cde6caee

Branch: refs/heads/ignite-627
Commit: cde6caee42afcc547a9cd93e1e3dcd756e41b431
Parents: 9dc251c
Author: Oleg Ignatenko <oi...@gridgain.com>
Authored: Mon Dec 17 13:22:53 2018 +0300
Committer: Dmitriy Govorukhin <dm...@gmail.com>
Committed: Mon Dec 17 13:22:53 2018 +0300

----------------------------------------------------------------------
 .../h2/CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest.java  | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/cde6caee/modules/indexing/src/test/java8/org/apache/ignite/internal/processors/query/h2/CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java8/org/apache/ignite/internal/processors/query/h2/CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest.java b/modules/indexing/src/test/java8/org/apache/ignite/internal/processors/query/h2/CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest.java
index 1854978..6a144fc 100644
--- a/modules/indexing/src/test/java8/org/apache/ignite/internal/processors/query/h2/CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest.java
+++ b/modules/indexing/src/test/java8/org/apache/ignite/internal/processors/query/h2/CacheQueryEntityWithJsr310Java8DateTimeApiFieldsTest.java
@@ -31,6 +31,9 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.query.SqlFieldsQuery;
 import org.apache.ignite.cache.query.annotations.QuerySqlField;
 import org.apache.ignite.configuration.CacheConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
 
 /**
  * Tests queries against entities with JSR-310 Java 8 Date and Time API fields.


[52/52] [abbrv] ignite git commit: merge

Posted by sb...@apache.org.
merge


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/404a9f3b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/404a9f3b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/404a9f3b

Branch: refs/heads/ignite-627
Commit: 404a9f3ba5504fc65d050208d68ed39ecefdce1d
Parents: f9c06b8 a8d3990
Author: sboikov <sb...@apache.org>
Authored: Wed Dec 19 23:23:26 2018 +0300
Committer: sboikov <sb...@apache.org>
Committed: Wed Dec 19 23:23:26 2018 +0300

----------------------------------------------------------------------
 .gitignore                                      |    5 +-
 .idea/inspectionProfiles/Project_Default.xml    |  776 ++++
 CONTRIBUTING.md                                 |   70 +
 RELEASE_NOTES.txt                               |  152 +
 bin/ignite-tf.sh                                |    0
 .../visorcmd/node_startup_by_ssh.sample.ini     |   74 -
 config/visor-cmd/node_startup_by_ssh.sample.ini |   79 +
 docker/web-console/standalone/Dockerfile        |   85 +
 docker/web-console/standalone/README.txt        |   35 +
 .../web-console/standalone/docker-entrypoint.sh |   23 +
 docker/web-console/standalone/nginx/nginx.conf  |   55 +
 .../standalone/nginx/web-console.conf           |   62 +
 .../encryption/example-encrypted-store.xml      |    2 +
 examples/config/example-ignite-ml.xml           |   38 +
 examples/pom-standalone-lgpl.xml                |    2 +-
 examples/pom-standalone.xml                     |    2 +-
 examples/pom.xml                                |    6 +
 examples/sql/world.sql                          |   28 +-
 .../clustering/KMeansClusterizationExample.java |    4 +-
 .../AlgorithmSpecificDatasetExample.java        |    2 +-
 ...niteFunctionDistributedInferenceExample.java |  100 +
 .../ml/inference/ModelStorageExample.java       |  122 +
 .../TensorFlowDistributedInferenceExample.java  |   99 +
 .../TensorFlowLocalInferenceExample.java        |   85 +
 .../TensorFlowThreadedInferenceExample.java     |   95 +
 .../examples/ml/inference/package-info.java     |   22 +
 .../ml/knn/ANNClassificationExample.java        |    3 +-
 .../ml/knn/KNNClassificationExample.java        |    7 +-
 .../examples/ml/knn/KNNRegressionExample.java   |    4 +-
 .../OneVsRestClassificationExample.java         |  163 +
 .../examples/ml/multiclass/package-info.java    |   22 +
 .../DiscreteNaiveBayesTrainerExample.java       |  115 +
 .../GaussianNaiveBayesTrainerExample.java       |   30 +-
 .../ml/preprocessing/StandardScalerExample.java |   84 +
 .../LinearRegressionLSQRTrainerExample.java     |    4 +-
 ...ssionLSQRTrainerWithMinMaxScalerExample.java |    4 +-
 .../LinearRegressionSGDTrainerExample.java      |    4 +-
 ...ggedLogisticRegressionSGDTrainerExample.java |  105 +
 .../logistic/bagged/package-info.java           |   22 +
 .../LogisticRegressionSGDTrainerExample.java    |   13 +-
 ...gressionMultiClassClassificationExample.java |  164 -
 .../logistic/multiclass/package-info.java       |   22 -
 .../ml/selection/scoring/EvaluatorExample.java  |   83 +
 .../scoring/MultipleMetricsExample.java         |   82 +
 .../split/TrainTestDatasetSplitterExample.java  |    4 +-
 .../ml/svm/SVMBinaryClassificationExample.java  |  113 +
 .../binary/SVMBinaryClassificationExample.java  |  112 -
 .../examples/ml/svm/binary/package-info.java    |   22 -
 .../SVMMultiClassClassificationExample.java     |  153 -
 .../ml/svm/multiclass/package-info.java         |   22 -
 ...ecisionTreeClassificationTrainerExample.java |    3 +-
 .../GDBOnTreesRegressionTrainerExample.java     |    2 +-
 .../RandomForestClassificationExample.java      |    7 +-
 .../RandomForestRegressionExample.java          |   13 +-
 .../ml/tutorial/Step_1_Read_and_Learn.java      |    6 +-
 .../examples/ml/tutorial/Step_2_Imputing.java   |    6 +-
 .../examples/ml/tutorial/Step_3_Categorial.java |    6 +-
 .../Step_3_Categorial_with_One_Hot_Encoder.java |    6 +-
 .../ml/tutorial/Step_4_Add_age_fare.java        |    6 +-
 .../examples/ml/tutorial/Step_5_Scaling.java    |    6 +-
 .../tutorial/Step_5_Scaling_with_Pipeline.java  |    6 +-
 .../ignite/examples/ml/tutorial/Step_6_KNN.java |    6 +-
 .../ml/tutorial/Step_7_Split_train_test.java    |    6 +-
 .../ignite/examples/ml/tutorial/Step_8_CV.java  |    6 +-
 .../ml/tutorial/Step_8_CV_with_Param_Grid.java  |    6 +-
 .../ml/tutorial/Step_9_Go_to_LogReg.java        |   14 +-
 .../examples/ml/tutorial/TitanicUtils.java      |    3 +-
 .../examples/ml/util/MLExamplesCommonArgs.java  |    2 +-
 .../examples/ml/util/MLSandboxDatasets.java     |   87 -
 .../ignite/examples/ml/util/SandboxMLCache.java |  144 -
 .../ml/xgboost/XGBoostModelParserExample.java   |   99 +
 .../examples/ml/xgboost/package-info.java       |   22 +
 .../ignite/examples/util/IrisDataset.java       |  129 -
 .../resources/datasets/agaricus-test-data.txt   | 1611 ++++++++
 .../datasets/agaricus-test-expected-results.txt | 1611 ++++++++
 .../datasets/boston_housing_dataset.txt         |  505 ---
 .../resources/datasets/cleared_machines.csv     |  209 --
 .../resources/datasets/glass_identification.csv |  116 -
 examples/src/main/resources/datasets/iris.txt   |  150 -
 .../main/resources/datasets/mortalitydata.csv   |   53 -
 .../resources/datasets/t10k-images-idx3-ubyte   |  Bin 0 -> 9876027 bytes
 .../resources/datasets/t10k-labels-idx1-ubyte   |  Bin 0 -> 10008 bytes
 .../resources/datasets/two_classed_iris.csv     |  100 -
 examples/src/main/resources/datasets/wine.txt   |  178 -
 .../models/mnist_tf_model/saved_model.pb        |  Bin 0 -> 37185 bytes
 .../variables/variables.data-00000-of-00001     |  Bin 0 -> 13098544 bytes
 .../mnist_tf_model/variables/variables.index    |  Bin 0 -> 410 bytes
 .../resources/models/xgboost/agaricus-model.txt |  714 ++++
 .../ignite/examples/BasicExamplesSelfTest.java  |    6 +
 .../examples/CacheClientBinaryExampleTest.java  |    3 +
 .../CacheContinuousQueryExamplesSelfTest.java   |    4 +
 .../ignite/examples/CacheExamplesSelfTest.java  |    4 +
 .../ComputeClientBinaryExampleTest.java         |    2 +
 .../examples/EncryptedCacheExampleSelfTest.java |    3 +
 .../ignite/examples/EventsExamplesSelfTest.java |    2 +
 .../examples/MessagingExamplesSelfTest.java     |    3 +
 .../examples/SpringDataExampleSelfTest.java     |    2 +
 .../ignite/examples/SqlExamplesSelfTest.java    |    4 +
 .../IgniteExamplesJ8SelfTestSuite.java          |   80 -
 .../testsuites/IgniteExamplesSelfTestSuite.java |   61 +-
 idea/disabled_plugins.txt                       |  113 +
 idea/ignite_inspections.xml                     |  772 ----
 idea/ignite_inspections_teamcity.xml            |   17 +-
 .../aop/aspectj/GridifyAspectJAspect.java       |    2 +-
 .../aspectj/GridifySetToSetAspectJAspect.java   |    2 +-
 .../aspectj/GridifySetToValueAspectJAspect.java |    2 +-
 .../aop/spring/GridifySetToSetSpringAspect.java |    2 +-
 .../spring/GridifySetToValueSpringAspect.java   |    2 +-
 .../gridify/aop/spring/GridifySpringAspect.java |    2 +-
 .../aop/spring/GridifySpringPointcut.java       |    8 +-
 .../apache/ignite/gridify/AbstractAopTest.java  |   47 +-
 .../apache/ignite/gridify/BasicAopSelfTest.java |    7 +-
 .../GridifySetToXXXNonSpringAopSelfTest.java    |    8 +-
 .../GridifySetToXXXSpringAopSelfTest.java       |    8 +-
 .../gridify/hierarchy/GridifyHierarchyTest.java |    7 +-
 .../optimized/OptimizedMarshallerAopTest.java   |    7 +-
 .../apache/ignite/p2p/P2PGridifySelfTest.java   |   14 +-
 .../testsuites/IgniteAopSelfTestSuite.java      |   18 +-
 .../singlesplit/SingleSplitsLoadTest.java       |    6 +-
 .../gridify/GridifySingleSplitLoadTest.java     |    8 +-
 .../gridify/ExternalNonSpringAopSelfTest.java   |   38 +-
 .../spi/checkpoint/s3/S3CheckpointSpi.java      |    1 -
 .../tcp/ipfinder/s3/TcpDiscoveryS3IpFinder.java |    1 -
 .../s3/S3CheckpointManagerSelfTest.java         |    8 +-
 .../s3/S3CheckpointSpiConfigSelfTest.java       |    7 +-
 .../checkpoint/s3/S3CheckpointSpiSelfTest.java  |    9 +-
 ...pointSpiStartStopBucketEndpointSelfTest.java |   12 +-
 ...ckpointSpiStartStopSSEAlgorithmSelfTest.java |   11 +-
 .../s3/S3CheckpointSpiStartStopSelfTest.java    |    7 +-
 .../s3/S3SessionCheckpointSelfTest.java         |    7 +-
 .../elb/TcpDiscoveryElbIpFinderSelfTest.java    |    7 +-
 .../TcpDiscoveryS3IpFinderAbstractSelfTest.java |    5 +
 ...3IpFinderAwsCredentialsProviderSelfTest.java |    7 +-
 ...scoveryS3IpFinderAwsCredentialsSelfTest.java |    7 +-
 ...scoveryS3IpFinderBucketEndpointSelfTest.java |    5 +
 ...TcpDiscoveryS3IpFinderKeyPrefixSelfTest.java |    5 +
 ...DiscoveryS3IpFinderSSEAlgorithmSelfTest.java |    7 +-
 .../s3/client/DummyObjectListingTest.java       |    5 +
 .../ipfinder/s3/client/DummyS3ClientTest.java   |    8 +
 .../ignite/testsuites/IgniteElbTestSuite.java   |    6 +-
 .../ignite/testsuites/IgniteS3TestSuite.java    |   32 +-
 .../stream/camel/IgniteCamelStreamerTest.java   |   10 +
 .../camel/IgniteCamelStreamerTestSuite.java     |   11 +-
 .../cassandra/CassandraCacheStoreFactory.java   |    2 -
 .../store/cassandra/common/CassandraHelper.java |    5 +-
 .../store/cassandra/datasource/DataSource.java  |   20 -
 .../KeyValuePersistenceSettings.java            |    5 -
 .../persistence/PersistenceController.java      |    1 -
 .../ignite/tests/CassandraConfigTest.java       |    5 +
 .../apache/ignite/tests/DDLGeneratorTest.java   |    1 -
 .../org/apache/ignite/tests/pojos/Person.java   |   20 -
 .../org/apache/ignite/tests/pojos/PersonId.java |    7 -
 .../apache/ignite/tests/pojos/SimplePerson.java |    1 -
 .../ignite/tests/pojos/SimplePersonId.java      |    1 -
 .../ignite/tests/utils/CassandraHelper.java     |    4 -
 .../ignite/tests/utils/TestCacheSession.java    |    1 -
 .../internal/TaskEventSubjectIdSelfTest.java    |    9 +
 .../ClientAbstractMultiThreadedSelfTest.java    |    7 +-
 .../client/ClientDefaultCacheSelfTest.java      |    5 +
 .../client/ClientReconnectionSelfTest.java      |   12 +-
 .../client/ClientSslParametersTest.java         |  338 ++
 .../ClientTcpSslAuthenticationSelfTest.java     |   10 +-
 ...skExecutionAfterTopologyRestartSelfTest.java |    7 +-
 .../client/impl/ClientCacheFlagsCodecTest.java  |    6 +
 .../client/impl/ClientComputeImplSelfTest.java  |   18 +-
 .../client/impl/ClientDataImplSelfTest.java     |   23 +-
 .../impl/ClientFutureAdapterSelfTest.java       |    8 +-
 .../ClientPropertiesConfigurationSelfTest.java  |    8 +-
 .../ClientAbstractConnectivitySelfTest.java     |   12 +-
 .../ClientAbstractMultiNodeSelfTest.java        |   10 +-
 .../integration/ClientAbstractSelfTest.java     |   13 +-
 .../integration/ClientPreferDirectSelfTest.java |    8 +-
 .../client/router/ClientFailedInitSelfTest.java |   10 +-
 .../client/router/RouterFactorySelfTest.java    |    7 +-
 .../router/TcpRouterAbstractSelfTest.java       |    7 +-
 .../client/suite/IgniteClientTestSuite.java     |  107 +-
 .../client/util/ClientByteUtilsTest.java        |   10 +-
 .../util/ClientConsistentHashSelfTest.java      |   11 +-
 .../client/util/ClientJavaHasherSelfTest.java   |    7 +-
 .../jdbc2/JdbcAbstractDmlStatementSelfTest.java |    1 -
 .../ignite/internal/jdbc2/JdbcBlobTest.java     |   15 +-
 .../internal/jdbc2/JdbcBulkLoadSelfTest.java    |    6 +-
 .../jdbc2/JdbcComplexQuerySelfTest.java         |   11 +-
 .../jdbc2/JdbcConnectionReopenTest.java         |    5 +
 .../internal/jdbc2/JdbcConnectionSelfTest.java  |   15 +
 .../jdbc2/JdbcDeleteStatementSelfTest.java      |    7 +
 .../jdbc2/JdbcDistributedJoinsQueryTest.java    |   11 +-
 .../jdbc2/JdbcDynamicIndexAbstractSelfTest.java |   11 +
 .../internal/jdbc2/JdbcEmptyCacheSelfTest.java  |    6 +
 .../internal/jdbc2/JdbcErrorsSelfTest.java      |    6 +
 .../jdbc2/JdbcInsertStatementSelfTest.java      |   12 +
 .../internal/jdbc2/JdbcLocalCachesSelfTest.java |    7 +
 .../jdbc2/JdbcMergeStatementSelfTest.java       |    7 +
 .../internal/jdbc2/JdbcMetadataSelfTest.java    |  163 +-
 .../jdbc2/JdbcNoCacheStreamingSelfTest.java     |    6 +
 .../internal/jdbc2/JdbcNoDefaultCacheTest.java  |    6 +
 .../jdbc2/JdbcPreparedStatementSelfTest.java    |   21 +-
 .../internal/jdbc2/JdbcResultSetSelfTest.java   |   29 +-
 .../internal/jdbc2/JdbcSpringSelfTest.java      |    6 +
 .../jdbc2/JdbcStatementBatchingSelfTest.java    |    8 +
 .../internal/jdbc2/JdbcStatementSelfTest.java   |   11 +-
 .../internal/jdbc2/JdbcStreamingSelfTest.java   |    8 +
 .../jdbc2/JdbcStreamingToPublicCacheTest.java   |    5 +
 .../jdbc2/JdbcUpdateStatementSelfTest.java      |    7 +
 .../rest/ChangeStateCommandHandlerTest.java     |    5 +
 .../rest/ClientMemcachedProtocolSelfTest.java   |   23 +
 .../JettyRestProcessorAbstractSelfTest.java     |  154 +-
 ...RestProcessorAuthenticationAbstractTest.java |   12 +-
 ...rocessorAuthenticationWithTokenSelfTest.java |    5 +
 .../JettyRestProcessorBaselineSelfTest.java     |  221 ++
 .../JettyRestProcessorGetAllAsArrayTest.java    |    5 +
 .../rest/JettyRestProcessorSignedSelfTest.java  |    5 +
 .../rest/RestBinaryProtocolSelfTest.java        |   21 +-
 .../rest/RestMemcacheProtocolSelfTest.java      |   20 +-
 .../rest/RestProcessorMultiStartSelfTest.java   |    6 +
 .../rest/RestProcessorStartSelfTest.java        |    7 +-
 .../rest/TaskCommandHandlerSelfTest.java        |    7 +-
 .../rest/TcpRestUnmarshalVulnerabilityTest.java |   12 +-
 .../processors/rest/TestBinaryClient.java       |    1 -
 .../processors/rest/TestMemcacheClient.java     |    1 -
 .../protocols/tcp/TcpRestParserSelfTest.java    |   12 +-
 .../tcp/redis/RedisProtocolConnectSelfTest.java |    7 +
 .../tcp/redis/RedisProtocolServerSelfTest.java  |    7 +
 ...tocolStringAtomicDatastructuresSelfTest.java |   49 +
 .../tcp/redis/RedisProtocolStringSelfTest.java  |   19 +
 .../ignite/jdbc/JdbcComplexQuerySelfTest.java   |   13 +-
 .../ignite/jdbc/JdbcConnectionSelfTest.java     |   14 +-
 .../ignite/jdbc/JdbcEmptyCacheSelfTest.java     |    8 +-
 .../ignite/jdbc/JdbcErrorsAbstractSelfTest.java |   39 +-
 .../ignite/jdbc/JdbcLocalCachesSelfTest.java    |    8 +-
 .../ignite/jdbc/JdbcMetadataSelfTest.java       |   80 +-
 .../ignite/jdbc/JdbcNoDefaultCacheTest.java     |    6 +
 .../jdbc/JdbcPojoLegacyQuerySelfTest.java       |    5 +
 .../ignite/jdbc/JdbcPojoQuerySelfTest.java      |    6 +
 .../jdbc/JdbcPreparedStatementSelfTest.java     |   22 +-
 .../ignite/jdbc/JdbcResultSetSelfTest.java      |   24 +-
 .../ignite/jdbc/JdbcStatementSelfTest.java      |   10 +-
 .../jdbc/JdbcVersionMismatchSelfTest.java       |    5 +
 .../suite/IgniteJdbcDriverMvccTestSuite.java    |   17 +-
 .../jdbc/suite/IgniteJdbcDriverTestSuite.java   |  199 +-
 .../JdbcThinAbstractDmlStatementSelfTest.java   |    6 +-
 .../JdbcThinAuthenticateConnectionSelfTest.java |   11 +-
 .../thin/JdbcThinAutoCloseServerCursorTest.java |   10 +-
 .../ignite/jdbc/thin/JdbcThinBatchSelfTest.java |   25 +
 .../thin/JdbcThinBulkLoadAbstractSelfTest.java  |   84 +-
 ...bcThinComplexDmlDdlCustomSchemaSelfTest.java |    8 +-
 .../thin/JdbcThinComplexDmlDdlSelfTest.java     |    8 +-
 .../jdbc/thin/JdbcThinComplexQuerySelfTest.java |   13 +-
 ...JdbcThinConnectionMultipleAddressesTest.java |   19 +-
 .../JdbcThinConnectionMvccEnabledSelfTest.java  |   13 +-
 .../jdbc/thin/JdbcThinConnectionSSLTest.java    |   17 +-
 .../jdbc/thin/JdbcThinConnectionSelfTest.java   |   60 +-
 .../jdbc/thin/JdbcThinDataSourceSelfTest.java   |   12 +-
 .../thin/JdbcThinDeleteStatementSelfTest.java   |    6 +
 .../JdbcThinDynamicIndexAbstractSelfTest.java   |   11 +
 .../jdbc/thin/JdbcThinEmptyCacheSelfTest.java   |    8 +-
 .../jdbc/thin/JdbcThinErrorsSelfTest.java       |   24 +-
 .../thin/JdbcThinInsertStatementSelfTest.java   |    9 +
 .../jdbc/thin/JdbcThinLocalQueriesSelfTest.java |    5 +
 .../thin/JdbcThinMergeStatementSelfTest.java    |    6 +
 .../JdbcThinMetadataPrimaryKeysSelfTest.java    |    8 +
 .../jdbc/thin/JdbcThinMetadataSelfTest.java     |  156 +-
 .../JdbcThinMissingLongArrayResultsTest.java    |    7 +-
 .../jdbc/thin/JdbcThinNoDefaultSchemaTest.java  |    9 +
 .../thin/JdbcThinPreparedStatementSelfTest.java |   24 +-
 .../jdbc/thin/JdbcThinResultSetSelfTest.java    |   27 +-
 .../jdbc/thin/JdbcThinSchemaCaseTest.java       |    7 +-
 .../thin/JdbcThinSelectAfterAlterTable.java     |   10 +-
 .../jdbc/thin/JdbcThinStatementSelfTest.java    |   41 +-
 .../thin/JdbcThinStreamingAbstractSelfTest.java |   17 +-
 .../ignite/jdbc/thin/JdbcThinTcpIoTest.java     |    7 +-
 ...ThinTransactionsAbstractComplexSelfTest.java |   36 +-
 .../jdbc/thin/JdbcThinTransactionsSelfTest.java |   36 +-
 ...ThinTransactionsWithMvccEnabledSelfTest.java |   34 +-
 .../thin/JdbcThinUpdateStatementSelfTest.java   |    6 +
 ...ctionFinishOnDeactivatedClusterSelfTest.java |  162 +
 .../loadtests/client/ClientCacheBenchmark.java  |    1 -
 .../client/ClientMarshallerBenchmarkTest.java   |    7 +-
 .../loadtests/client/ClientTcpSslLoadTest.java  |    8 +-
 .../TcpDiscoveryCloudIpFinderSelfTest.java      |   19 +-
 .../ignite/testsuites/IgniteCloudTestSuite.java |   10 +-
 .../ignite/codegen/MessageCodeGenerator.java    |   11 +-
 modules/compatibility/pom.xml                   |    7 +
 .../PdsWithTtlCompatibilityTest.java            |    5 +
 .../FoldersReuseCompatibilityTest.java          |    6 +
 .../IgnitePKIndexesMigrationToUnwrapPkTest.java |  263 ++
 ...tingToWalV2SerializerWithCompactionTest.java |    5 +
 .../PersistenceBasicCompatibilityTest.java      |   37 +
 .../testframework/junits/Dependency.java        |   95 +-
 .../junits/IgniteCompatibilityAbstractTest.java |   40 +-
 .../junits/IgniteCompatibilityNodeRunner.java   |   19 +-
 .../testframework/util/MavenUtils.java          |   15 +-
 .../IgniteCompatibilityBasicTestSuite.java      |   12 +-
 modules/compress/licenses/Snappy-LICENSE.txt    |   29 +
 .../compress/licenses/Snappy-java-LICENSE.txt   |  202 +
 modules/compress/licenses/Zstd-LICENSE.txt      |   30 +
 modules/compress/licenses/Zstd-jni-LICENSE.txt  |   26 +
 modules/compress/licenses/jnr-ffi-LICENSE.txt   |   25 +
 modules/compress/licenses/jnr-posix-LICENSE.txt | 2486 +++++++++++++
 modules/compress/licenses/lz4-LICENSE.txt       |   11 +
 modules/compress/licenses/lz4-java-LICENSE.txt  |  202 +
 modules/compress/pom.xml                        |  113 +
 .../compress/CompressionProcessorImpl.java      |  403 ++
 .../compress/NativeFileSystemLinux.java         |  142 +
 .../compress/NativeFileSystemPosix.java         |   54 +
 .../compress/CompressionConfigurationTest.java  |  109 +
 .../compress/CompressionProcessorTest.java      | 1085 ++++++
 ...DiskPageCompressionIntegrationAsyncTest.java |   30 +
 .../DiskPageCompressionIntegrationTest.java     |  480 +++
 .../compress/FileSystemUtilsTest.java           |  198 +
 .../IgnitePdsCompressionTestSuite.java          |   59 +
 .../IgnitePdsCompressionTestSuite2.java         |   38 +
 .../org/apache/ignite/DataStorageMetrics.java   |   18 +
 .../java/org/apache/ignite/IgniteCache.java     |    4 +-
 .../org/apache/ignite/IgniteJdbcDriver.java     |    1 -
 .../apache/ignite/IgniteJdbcThinDataSource.java |    1 -
 .../org/apache/ignite/IgniteJdbcThinDriver.java |    1 -
 .../java/org/apache/ignite/IgniteQueue.java     |    8 +
 .../apache/ignite/IgniteSystemProperties.java   |   94 +-
 .../org/apache/ignite/cache/CacheManager.java   |    1 -
 .../ignite/cache/affinity/AffinityKey.java      |    1 -
 .../cache/affinity/AffinityKeyMapped.java       |    4 +-
 ...lusterNodeAttributeAffinityBackupFilter.java |    2 +-
 .../cache/eviction/fifo/FifoEvictionPolicy.java |    1 -
 .../cache/eviction/lru/LruEvictionPolicy.java   |    1 -
 .../eviction/sorted/SortedEvictionPolicy.java   |    4 -
 .../ignite/cache/query/ContinuousQuery.java     |   11 +-
 .../org/apache/ignite/cache/query/Query.java    |   20 +-
 .../ignite/cache/query/SqlFieldsQuery.java      |    4 +
 .../org/apache/ignite/cache/query/SqlQuery.java |    4 +
 .../apache/ignite/cache/query/TextQuery.java    |   32 +-
 .../cache/store/jdbc/CacheJdbcBlobStore.java    |    1 -
 .../store/jdbc/CacheJdbcPojoStoreFactory.java   |    2 -
 .../ignite/compute/ComputeJobAdapter.java       |    1 -
 .../apache/ignite/compute/ComputeTaskName.java  |    2 +-
 .../apache/ignite/compute/ComputeTaskSpis.java  |    1 -
 .../apache/ignite/compute/gridify/Gridify.java  |    6 -
 .../ignite/compute/gridify/GridifySetToSet.java |    1 -
 .../compute/gridify/GridifySetToValue.java      |    1 -
 .../gridify/aop/GridifyDefaultRangeTask.java    |    1 -
 .../aop/GridifySetToSetAbstractAspect.java      |    1 -
 .../configuration/CacheConfiguration.java       |   74 +-
 .../configuration/DataStorageConfiguration.java |   17 +-
 .../configuration/DiskPageCompression.java      |   53 +
 .../configuration/IgniteConfiguration.java      |   45 +-
 .../configuration/MemoryConfiguration.java      |    1 -
 .../SqlConnectorConfiguration.java              |    1 -
 .../org/apache/ignite/events/CacheEvent.java    |   25 +-
 .../ignite/failure/AbstractFailureHandler.java  |   16 +-
 .../apache/ignite/failure/FailureHandler.java   |    6 -
 .../java/org/apache/ignite/igfs/IgfsPath.java   |    1 -
 .../records/IgfsNewLineRecordResolver.java      |    1 -
 .../local/LocalIgfsSecondaryFileSystem.java     |    1 -
 .../ignite/internal/AsyncSupportAdapter.java    |    3 -
 .../internal/GridEventConsumeHandler.java       |    1 -
 .../ignite/internal/GridJobCancelRequest.java   |    2 +-
 .../ignite/internal/GridJobContextImpl.java     |    1 -
 .../ignite/internal/GridJobExecuteRequest.java  |    4 +-
 .../ignite/internal/GridJobExecuteResponse.java |    4 +-
 .../ignite/internal/GridJobSessionImpl.java     |    3 -
 .../ignite/internal/GridJobSiblingsRequest.java |    2 +-
 .../internal/GridJobSiblingsResponse.java       |    2 +-
 .../ignite/internal/GridKernalContext.java      |   17 +
 .../ignite/internal/GridKernalContextImpl.java  |   48 +-
 .../ignite/internal/GridKernalGatewayImpl.java  |    2 +-
 .../apache/ignite/internal/GridLoggerProxy.java |    2 -
 .../ignite/internal/GridPluginComponent.java    |    1 -
 .../ignite/internal/GridTaskCancelRequest.java  |    2 +-
 .../ignite/internal/GridTaskSessionImpl.java    |    3 -
 .../ignite/internal/GridTaskSessionRequest.java |    2 +-
 .../ignite/internal/IgniteComponentType.java    |    9 +-
 .../ignite/internal/IgniteComputeImpl.java      |    3 -
 .../ignite/internal/IgniteEventsImpl.java       |    1 -
 .../apache/ignite/internal/IgniteFeatures.java  |  101 +
 .../ignite/internal/IgniteInternalFuture.java   |    4 +
 .../IgniteInterruptedCheckedException.java      |    1 -
 .../apache/ignite/internal/IgniteKernal.java    |   64 +-
 .../ignite/internal/IgniteNodeAttributes.java   |    9 +-
 .../ignite/internal/IgniteServicesImpl.java     |    1 -
 .../org/apache/ignite/internal/IgnitionEx.java  |   10 +-
 .../ignite/internal/MarshallerContextImpl.java  |    8 +-
 .../java/org/apache/ignite/internal/README.md   |   12 +
 .../internal/binary/BinaryClassDescriptor.java  |    1 -
 .../ignite/internal/binary/BinaryEnumCache.java |    1 -
 .../internal/binary/BinaryEnumObjectImpl.java   |    1 -
 .../ignite/internal/binary/BinaryFieldImpl.java |    1 -
 .../internal/binary/BinaryMarshaller.java       |    1 -
 .../internal/binary/BinaryObjectExImpl.java     |    7 +-
 .../internal/binary/BinaryObjectImpl.java       |    7 -
 .../binary/BinaryObjectOffheapImpl.java         |    7 -
 .../internal/binary/BinaryReaderExImpl.java     |    3 -
 .../internal/binary/BinaryReaderHandles.java    |    1 -
 .../ignite/internal/binary/BinaryTreeMap.java   |    1 -
 .../ignite/internal/binary/BinaryTreeSet.java   |    1 -
 .../ignite/internal/binary/BinaryUtils.java     |    3 -
 .../internal/binary/BinaryWriterExImpl.java     |    3 -
 .../internal/binary/BinaryWriterHandles.java    |    1 -
 .../internal/binary/GridBinaryMarshaller.java   |    3 -
 .../binary/builder/BinaryObjectBuilderImpl.java |    6 +-
 .../client/GridClientPartitionAffinity.java     |    1 -
 .../client/impl/GridClientDataImpl.java         |    1 -
 .../client/impl/GridClientNodeImpl.java         |    1 -
 .../connection/GridClientNioTcpConnection.java  |    2 +-
 .../marshaller/jdk/GridClientJdkMarshaller.java |    1 -
 .../router/GridTcpRouterConfiguration.java      |    1 -
 .../impl/GridRouterCommandLineStartup.java      |    1 -
 .../client/ssl/GridSslBasicContextFactory.java  |   88 +-
 .../internal/client/thin/ClientBinary.java      |    1 -
 .../internal/client/thin/ClientUtils.java       |    1 -
 .../internal/client/thin/TcpClientCache.java    |    1 -
 .../client/util/GridClientConsistentHash.java   |    1 -
 .../client/util/GridConcurrentHashSet.java      |    4 -
 .../ignite/internal/commandline/Arguments.java  |  154 +-
 .../internal/commandline/CommandHandler.java    |  584 ++-
 .../commandline/cache/CacheArguments.java       |   18 +
 .../internal/direct/DirectMessageReader.java    |   30 +
 .../internal/direct/DirectMessageWriter.java    |   26 +
 .../direct/state/DirectMessageState.java        |    2 -
 .../direct/stream/DirectByteBufferStream.java   |   11 +
 .../stream/v1/DirectByteBufferStreamImplV1.java |   19 +-
 .../stream/v2/DirectByteBufferStreamImplV2.java |   26 +-
 .../stream/v3/DirectByteBufferStreamImplV3.java |  298 ++
 .../internal/executor/GridExecutorService.java  |    3 -
 .../igfs/common/IgfsControlResponse.java        |    2 -
 .../ignite/internal/jdbc/JdbcResultSet.java     |    1 -
 .../apache/ignite/internal/jdbc/JdbcUtils.java  |   13 +-
 .../internal/jdbc/thin/JdbcThinConnection.java  |    2 -
 .../jdbc/thin/JdbcThinDatabaseMetadata.java     |   39 +-
 .../jdbc/thin/JdbcThinParameterMetadata.java    |    1 -
 .../jdbc/thin/JdbcThinPreparedStatement.java    |    1 -
 .../internal/jdbc/thin/JdbcThinResultSet.java   |    5 -
 .../internal/jdbc/thin/JdbcThinStatement.java   |    1 -
 .../internal/jdbc/thin/JdbcThinTcpIo.java       |    2 -
 .../internal/jdbc/thin/JdbcThinUtils.java       |   13 +-
 .../ignite/internal/jdbc2/JdbcConnection.java   |    3 -
 .../internal/jdbc2/JdbcDatabaseMetadata.java    |   39 +-
 .../ignite/internal/jdbc2/JdbcResultSet.java    |    3 -
 .../internal/jdbc2/JdbcResultSetMetadata.java   |    1 -
 .../ignite/internal/jdbc2/JdbcStatement.java    |    2 -
 .../apache/ignite/internal/jdbc2/JdbcUtils.java |    7 +-
 .../internal/managers/GridManagerAdapter.java   |    2 -
 .../checkpoint/GridCheckpointManager.java       |    3 +-
 .../checkpoint/GridCheckpointRequest.java       |    2 +-
 .../managers/communication/GridIoManager.java   |   19 +-
 .../communication/GridIoMessageFactory.java     |    8 +-
 .../communication/GridIoUserMessage.java        |    2 +-
 .../communication/IgniteIoTestMessage.java      |    2 +
 .../managers/deployment/GridDeployment.java     |    5 +-
 .../deployment/GridDeploymentCommunication.java |   11 +-
 .../deployment/GridDeploymentInfoBean.java      |    2 +-
 .../deployment/GridDeploymentLocalStore.java    |    1 -
 .../GridDeploymentPerVersionStore.java          |    1 -
 .../deployment/GridDeploymentRequest.java       |    2 +-
 .../deployment/GridDeploymentResponse.java      |    2 +-
 .../internal/managers/discovery/DiscoCache.java |   15 -
 .../discovery/GridDiscoveryManager.java         |   58 +-
 .../encryption/GridEncryptionManager.java       |    6 +-
 .../eventstorage/GridEventStorageManager.java   |    8 +-
 .../eventstorage/GridEventStorageMessage.java   |    2 +-
 .../managers/indexing/GridIndexingManager.java  |    3 -
 .../optimized/OptimizedClassDescriptor.java     |    2 -
 .../optimized/OptimizedMarshaller.java          |    2 -
 .../optimized/OptimizedObjectInputStream.java   |    7 -
 .../optimized/OptimizedObjectOutputStream.java  |    2 -
 .../OptimizedObjectStreamRegistry.java          |    1 -
 .../apache/ignite/internal/package-info.java    |    4 +-
 .../internal/pagemem/PageIdAllocator.java       |    6 +
 .../ignite/internal/pagemem/PageSupport.java    |   14 +
 .../ignite/internal/pagemem/PageUtils.java      |    1 -
 .../pagemem/impl/PageMemoryNoStoreImpl.java     |   21 +-
 .../internal/pagemem/store/PageStore.java       |   34 +-
 .../pagemem/wal/IgniteWriteAheadLogManager.java |   16 +
 .../internal/pagemem/wal/WALIterator.java       |    6 +-
 .../internal/pagemem/wal/record/DataEntry.java  |    1 +
 .../internal/pagemem/wal/record/DataRecord.java |   10 +
 .../pagemem/wal/record/LazyDataEntry.java       |    1 -
 .../pagemem/wal/record/LazyMvccDataEntry.java   |  149 +
 .../wal/record/MemoryRecoveryRecord.java        |    9 +-
 .../pagemem/wal/record/MetastoreDataRecord.java |    8 +-
 .../pagemem/wal/record/MvccDataEntry.java       |   75 +
 .../pagemem/wal/record/MvccDataRecord.java      |   69 +
 .../pagemem/wal/record/MvccTxRecord.java        |   98 +
 .../internal/pagemem/wal/record/TxRecord.java   |   34 +-
 .../pagemem/wal/record/UnwrapMvccDataEntry.java |  130 +
 .../internal/pagemem/wal/record/WALRecord.java  |  171 +-
 .../delta/MetaPageUpdateNextSnapshotId.java     |   10 +-
 .../MetaPageUpdatePartitionDataRecord.java      |    3 +-
 .../apache/ignite/internal/processors/README.md |   27 +
 .../processors/affinity/AffinityAssignment.java |    6 -
 .../affinity/AffinityTopologyVersion.java       |   11 +-
 .../affinity/GridAffinityAssignment.java        |   15 +-
 .../affinity/GridAffinityAssignmentCache.java   |   61 +-
 .../affinity/GridAffinityProcessor.java         |    4 +-
 .../processors/affinity/GridAffinityUtils.java  |    2 +-
 .../affinity/HistoryAffinityAssignment.java     |   19 +-
 .../IgniteAuthenticationProcessor.java          |    2 -
 .../processors/authentication/User.java         |    7 +-
 .../UserAuthenticateResponseMessage.java        |    2 +-
 .../cache/CacheAffinitySharedManager.java       |   72 +-
 .../cache/CacheCompressionManager.java          |   95 +
 .../processors/cache/CacheEntryImpl.java        |    1 -
 .../processors/cache/CacheEntryImpl0.java       |    1 -
 .../cache/CacheEntryInfoCollection.java         |    2 +-
 .../processors/cache/CacheEntryPredicate.java   |    2 +-
 .../cache/CacheEntryPredicateAdapter.java       |    2 +-
 .../cache/CacheEntryPredicateContainsValue.java |    6 +-
 .../cache/CacheEntryPredicateHasValue.java      |    2 +-
 .../cache/CacheEntryPredicateNoValue.java       |    2 +-
 .../cache/CacheEntrySerializablePredicate.java  |    2 +-
 .../cache/CacheEvictableEntryImpl.java          |    8 +-
 .../processors/cache/CacheEvictionEntry.java    |    2 +-
 .../processors/cache/CacheGroupContext.java     |  281 +-
 .../cache/CacheGroupMetricsMXBeanImpl.java      |   30 +-
 .../cache/CacheInvokeDirectResult.java          |    2 +-
 .../processors/cache/CacheInvokeEntry.java      |    1 -
 .../processors/cache/CacheInvokeResult.java     |    1 -
 .../processors/cache/CacheLazyEntry.java        |    2 -
 .../internal/processors/cache/CacheObject.java  |    2 +-
 .../processors/cache/CacheObjectAdapter.java    |    2 +-
 .../cache/CacheObjectByteArrayImpl.java         |    2 +-
 .../processors/cache/CacheObjectContext.java    |   36 +-
 .../processors/cache/CacheObjectImpl.java       |    3 +-
 .../processors/cache/CacheObjectUtils.java      |    1 -
 .../CachePartialUpdateCheckedException.java     |    1 -
 .../processors/cache/CachesRegistry.java        |    2 +-
 .../processors/cache/ClusterCachesInfo.java     |   22 +-
 .../processors/cache/ExchangeContext.java       |   43 +-
 .../cache/ExchangeDiscoveryEvents.java          |    1 +
 .../processors/cache/GridCacheAdapter.java      |  108 +-
 .../cache/GridCacheAffinityManager.java         |   25 +-
 .../cache/GridCacheConcurrentMapImpl.java       |   14 +-
 .../processors/cache/GridCacheContext.java      |  138 +-
 .../processors/cache/GridCacheContextInfo.java  |  166 +
 .../cache/GridCacheDeploymentManager.java       |    3 +-
 .../processors/cache/GridCacheEntryEx.java      |   13 +-
 .../processors/cache/GridCacheEventManager.java |   33 +-
 .../cache/GridCacheEvictionManager.java         |    7 +-
 .../cache/GridCacheFilterFailedException.java   |    1 -
 .../cache/GridCacheGroupIdMessage.java          |    6 +-
 .../processors/cache/GridCacheIdMessage.java    |    6 +-
 .../processors/cache/GridCacheIoManager.java    |   94 +-
 .../processors/cache/GridCacheMapEntry.java     |  239 +-
 .../processors/cache/GridCacheMessage.java      |   41 +-
 .../cache/GridCacheMvccCandidate.java           |    2 -
 .../processors/cache/GridCacheMvccManager.java  |   29 +-
 .../GridCachePartitionExchangeManager.java      |  232 +-
 .../processors/cache/GridCachePreloader.java    |   10 +
 .../cache/GridCachePreloaderAdapter.java        |   10 +
 .../processors/cache/GridCacheProcessor.java    |  715 ++--
 .../processors/cache/GridCacheProxyImpl.java    |    7 +-
 .../processors/cache/GridCacheReturn.java       |    4 -
 .../cache/GridCacheSharedTtlCleanupManager.java |   15 +-
 .../processors/cache/GridCacheUtilityKey.java   |    1 -
 .../processors/cache/GridCacheUtils.java        |   10 +-
 .../cache/GridCacheValueCollection.java         |    1 -
 .../GridChangeGlobalStateMessageResponse.java   |   10 +-
 .../cache/IgniteCacheOffheapManager.java        |   78 +-
 .../cache/IgniteCacheOffheapManagerImpl.java    |  303 +-
 .../processors/cache/IgniteCacheProxy.java      |    2 -
 .../processors/cache/IgniteCacheProxyImpl.java  |    7 +-
 .../processors/cache/IgniteInternalCache.java   |    4 +-
 .../processors/cache/KeyCacheObject.java        |    2 +-
 .../processors/cache/KeyCacheObjectImpl.java    |    1 -
 .../cache/LocalJoinCachesContext.java           |   30 +-
 .../cache/PartitionUpdateCounter.java           |   28 +-
 .../ignite/internal/processors/cache/README.md  |    8 +
 .../processors/cache/StartCacheInfo.java        |   25 +
 .../processors/cache/WalStateAckMessage.java    |    2 +
 .../processors/cache/WalStateManager.java       |   35 +-
 .../cache/affinity/GridCacheAffinityProxy.java  |    1 -
 .../cache/binary/CacheObjectBinaryContext.java  |   62 -
 .../binary/CacheObjectBinaryProcessor.java      |  149 -
 .../binary/CacheObjectBinaryProcessorImpl.java  |  355 +-
 .../cache/binary/IgniteBinaryImpl.java          |    5 +-
 .../CacheDataStructuresManager.java             |   19 +-
 .../distributed/GridCacheTtlUpdateRequest.java  |   30 +-
 .../distributed/GridCacheTxRecoveryFuture.java  |    2 -
 .../distributed/GridCacheTxRecoveryRequest.java |   26 +-
 .../GridCacheTxRecoveryResponse.java            |   14 +-
 .../distributed/GridDistributedBaseMessage.java |   16 +-
 .../distributed/GridDistributedCacheEntry.java  |   18 +-
 .../distributed/GridDistributedLockRequest.java |   54 +-
 .../GridDistributedLockResponse.java            |   14 +-
 .../GridDistributedTxFinishRequest.java         |   62 +-
 .../GridDistributedTxFinishResponse.java        |   18 +-
 .../GridDistributedTxPrepareRequest.java        |   54 +-
 .../GridDistributedTxPrepareResponse.java       |   14 +-
 .../GridDistributedTxRemoteAdapter.java         |   18 +-
 .../GridDistributedUnlockRequest.java           |    6 +-
 .../dht/CacheDistributedGetFutureAdapter.java   |  436 ++-
 .../dht/ClientCacheDhtTopologyFuture.java       |    5 +
 .../dht/GridDhtAffinityAssignmentRequest.java   |   18 +-
 .../dht/GridDhtAffinityAssignmentResponse.java  |   26 +-
 .../distributed/dht/GridDhtCacheAdapter.java    |   46 +-
 .../distributed/dht/GridDhtCacheEntry.java      |   13 +-
 .../cache/distributed/dht/GridDhtGetFuture.java |   49 +-
 .../distributed/dht/GridDhtGetSingleFuture.java |   50 +-
 .../distributed/dht/GridDhtLockFuture.java      |   11 +-
 .../distributed/dht/GridDhtLockRequest.java     |   76 +-
 .../distributed/dht/GridDhtLockResponse.java    |   18 +-
 .../distributed/dht/GridDhtTopologyFuture.java  |    6 +
 .../dht/GridDhtTopologyFutureAdapter.java       |  233 +-
 .../dht/GridDhtTransactionalCacheAdapter.java   |   78 +-
 .../dht/GridDhtTxAbstractEnlistFuture.java      |  180 +-
 .../distributed/dht/GridDhtTxEnlistFuture.java  |   13 +-
 .../distributed/dht/GridDhtTxFinishFuture.java  |    6 +-
 .../distributed/dht/GridDhtTxFinishRequest.java |   54 +-
 .../dht/GridDhtTxFinishResponse.java            |   14 +-
 .../cache/distributed/dht/GridDhtTxLocal.java   |   23 +-
 .../distributed/dht/GridDhtTxLocalAdapter.java  |    3 -
 .../cache/distributed/dht/GridDhtTxMapping.java |    1 -
 .../dht/GridDhtTxOnePhaseCommitAckRequest.java  |    6 +-
 .../distributed/dht/GridDhtTxPrepareFuture.java |   90 +-
 .../dht/GridDhtTxPrepareRequest.java            |  111 +-
 .../dht/GridDhtTxPrepareResponse.java           |   22 +-
 .../dht/GridDhtTxQueryEnlistRequest.java        |   30 +-
 .../dht/GridDhtTxQueryEnlistResponse.java       |   16 +-
 .../dht/GridDhtTxQueryFirstEnlistRequest.java   |   42 +-
 .../cache/distributed/dht/GridDhtTxRemote.java  |   14 +-
 .../distributed/dht/GridDhtUnlockRequest.java   |    6 +-
 .../dht/GridPartitionedGetFuture.java           |  583 +--
 .../dht/GridPartitionedSingleGetFuture.java     |  357 +-
 .../dht/NearTxQueryEnlistResultHandler.java     |    1 -
 .../distributed/dht/NearTxResultHandler.java    |    1 -
 .../dht/PartitionUpdateCountersMessage.java     |    4 +-
 .../GridDhtAtomicAbstractUpdateRequest.java     |   42 +-
 .../dht/atomic/GridDhtAtomicCache.java          |  136 +-
 .../GridDhtAtomicDeferredUpdateResponse.java    |    6 +-
 .../dht/atomic/GridDhtAtomicNearResponse.java   |   22 +-
 .../GridDhtAtomicSingleUpdateRequest.java       |   18 +-
 .../dht/atomic/GridDhtAtomicUpdateRequest.java  |   66 +-
 .../dht/atomic/GridDhtAtomicUpdateResponse.java |   18 +-
 .../GridNearAtomicAbstractUpdateFuture.java     |   44 +-
 .../GridNearAtomicAbstractUpdateRequest.java    |   38 +-
 .../GridNearAtomicCheckUpdateRequest.java       |   10 +-
 .../atomic/GridNearAtomicFullUpdateRequest.java |   40 +-
 ...GridNearAtomicSingleUpdateFilterRequest.java |    6 +-
 .../GridNearAtomicSingleUpdateFuture.java       |    1 -
 ...GridNearAtomicSingleUpdateInvokeRequest.java |   10 +-
 .../GridNearAtomicSingleUpdateRequest.java      |   10 +-
 .../dht/atomic/GridNearAtomicUpdateFuture.java  |    5 -
 .../atomic/GridNearAtomicUpdateResponse.java    |   36 +-
 .../dht/atomic/NearCacheUpdates.java            |    1 -
 .../dht/colocated/GridDhtColocatedCache.java    |   62 +-
 .../colocated/GridDhtColocatedLockFuture.java   |   19 +-
 .../CachePartitionPartialCountersMap.java       |    2 +-
 .../dht/preloader/GridDhtForceKeysFuture.java   |    6 +-
 .../dht/preloader/GridDhtForceKeysRequest.java  |   22 +-
 .../dht/preloader/GridDhtForceKeysResponse.java |   22 +-
 .../GridDhtPartitionDemandLegacyMessage.java    |   40 +-
 .../GridDhtPartitionDemandMessage.java          |   32 +-
 .../dht/preloader/GridDhtPartitionDemander.java |    9 +-
 .../preloader/GridDhtPartitionExchangeId.java   |    6 +-
 .../dht/preloader/GridDhtPartitionSupplier.java |    1 -
 .../GridDhtPartitionSupplyMessage.java          |   47 +-
 .../GridDhtPartitionSupplyMessageV2.java        |    6 +-
 .../GridDhtPartitionsAbstractMessage.java       |   14 +-
 .../GridDhtPartitionsExchangeFuture.java        |  196 +-
 .../preloader/GridDhtPartitionsFullMessage.java |  273 +-
 .../GridDhtPartitionsSingleMessage.java         |   98 +-
 .../GridDhtPartitionsSingleRequest.java         |    6 +-
 .../dht/preloader/GridDhtPreloader.java         |   91 +-
 .../preloader/latch/ExchangeLatchManager.java   |    2 +-
 .../dht/preloader/latch/LatchAckMessage.java    |    6 +-
 .../topology/GridClientPartitionTopology.java   |   21 +-
 .../dht/topology/GridDhtLocalPartition.java     |   56 +-
 .../dht/topology/GridDhtPartitionTopology.java  |   22 +-
 .../topology/GridDhtPartitionTopologyImpl.java  |  328 +-
 .../GridDhtPartitionsStateValidator.java        |    4 +-
 .../distributed/near/CacheVersionedValue.java   |    2 +-
 .../distributed/near/GridNearAtomicCache.java   |    4 -
 .../distributed/near/GridNearCacheAdapter.java  |    2 +-
 .../distributed/near/GridNearCacheEntry.java    |    4 +-
 .../distributed/near/GridNearGetFuture.java     |  459 +--
 .../distributed/near/GridNearGetRequest.java    |   91 +-
 .../distributed/near/GridNearGetResponse.java   |   34 +-
 .../distributed/near/GridNearLockFuture.java    |   22 +-
 .../distributed/near/GridNearLockRequest.java   |   71 +-
 .../distributed/near/GridNearLockResponse.java  |   30 +-
 ...arOptimisticSerializableTxPrepareFuture.java |   53 +-
 .../near/GridNearOptimisticTxPrepareFuture.java |   52 +-
 ...ridNearOptimisticTxPrepareFutureAdapter.java |  114 -
 .../GridNearPessimisticTxPrepareFuture.java     |   87 +-
 .../near/GridNearSingleGetRequest.java          |   75 +-
 .../near/GridNearSingleGetResponse.java         |   26 +-
 .../near/GridNearTransactionalCache.java        |    6 +-
 .../near/GridNearTxAbstractEnlistFuture.java    |   13 +-
 .../near/GridNearTxEnlistFuture.java            |   47 +-
 .../near/GridNearTxEnlistRequest.java           |   70 +-
 .../near/GridNearTxEnlistResponse.java          |   36 +-
 .../near/GridNearTxFinishFuture.java            |    3 -
 .../near/GridNearTxFinishRequest.java           |   10 +-
 .../near/GridNearTxFinishResponse.java          |   14 +-
 .../cache/distributed/near/GridNearTxLocal.java |   83 +-
 .../near/GridNearTxPrepareFutureAdapter.java    |    1 -
 .../near/GridNearTxPrepareRequest.java          |   86 +-
 .../near/GridNearTxPrepareResponse.java         |   74 +-
 .../near/GridNearTxQueryEnlistFuture.java       |    5 +
 .../near/GridNearTxQueryEnlistRequest.java      |   78 +-
 .../near/GridNearTxQueryEnlistResponse.java     |   44 +-
 .../GridNearTxQueryResultsEnlistFuture.java     |   27 +-
 .../GridNearTxQueryResultsEnlistRequest.java    |   62 +-
 .../GridNearTxQueryResultsEnlistResponse.java   |   12 +-
 .../distributed/near/GridNearTxRemote.java      |   44 +-
 .../distributed/near/GridNearUnlockRequest.java |    2 +-
 .../near/TxTopologyVersionFuture.java           |   13 +-
 .../cache/local/GridLocalCacheEntry.java        |   22 +-
 .../cache/local/GridLocalLockFuture.java        |    4 +-
 .../local/atomic/GridLocalAtomicCache.java      |   11 +-
 .../cache/mvcc/MvccCachingManager.java          |   30 +-
 .../mvcc/MvccPreviousCoordinatorQueries.java    |   13 +-
 .../processors/cache/mvcc/MvccProcessor.java    |   45 +-
 .../cache/mvcc/MvccProcessorImpl.java           |  467 +--
 .../cache/mvcc/MvccQueryTrackerImpl.java        |   12 +-
 .../processors/cache/mvcc/MvccUtils.java        |   65 +-
 .../mvcc/msg/MvccAckRequestTxAndQueryId.java    |    1 +
 .../cache/mvcc/msg/MvccSnapshotResponse.java    |    2 +
 .../cache/mvcc/msg/MvccTxSnapshotRequest.java   |    2 +
 .../PartitionCountersNeighborcastRequest.java   |   10 +-
 .../PartitionCountersNeighborcastResponse.java  |    6 +-
 .../processors/cache/mvcc/txlog/TxLog.java      |   77 +-
 .../internal/processors/cache/package-info.java |   23 +
 .../cache/persistence/CacheDataRowAdapter.java  |    7 +-
 .../cache/persistence/CheckpointFuture.java     |    2 +-
 .../persistence/DataRegionMetricsImpl.java      |   19 +
 .../persistence/DataStorageMetricsImpl.java     |   22 +-
 .../persistence/DataStorageMetricsSnapshot.java |   18 +
 .../cache/persistence/DataStructure.java        |   45 +-
 .../persistence/DatabaseLifecycleListener.java  |   52 +-
 .../GridCacheDatabaseSharedManager.java         | 1553 ++++----
 .../persistence/GridCacheOffheapManager.java    |  211 +-
 .../IgniteCacheDatabaseSharedManager.java       |  110 +-
 .../cache/persistence/IndexStorage.java         |   26 +-
 .../cache/persistence/IndexStorageImpl.java     |   37 +-
 .../processors/cache/persistence/README.md      |   10 +
 .../processors/cache/persistence/RowStore.java  |   24 +-
 .../cache/persistence/file/AbstractFileIO.java  |    2 +-
 .../cache/persistence/file/AsyncFileIO.java     |   38 +-
 .../persistence/file/AsyncFileIOFactory.java    |    9 -
 .../cache/persistence/file/EncryptedFileIO.java |   16 +-
 .../file/EncryptedFileIOFactory.java            |    7 -
 .../cache/persistence/file/FileIO.java          |   19 +
 .../cache/persistence/file/FileIODecorator.java |   17 +-
 .../cache/persistence/file/FileIOFactory.java   |   10 +-
 .../cache/persistence/file/FilePageStore.java   |   79 +-
 .../persistence/file/FilePageStoreManager.java  |  181 +-
 .../cache/persistence/file/FilePageStoreV2.java |   21 +
 .../persistence/file/RandomAccessFileIO.java    |   35 +
 .../file/RandomAccessFileIOFactory.java         |    9 -
 .../cache/persistence/file/UnzipFileIO.java     |   15 +
 .../persistence/freelist/AbstractFreeList.java  |   51 +-
 .../persistence/freelist/CacheFreeListImpl.java |    5 +-
 .../cache/persistence/freelist/FreeList.java    |   10 +-
 .../cache/persistence/freelist/PagesList.java   |  101 +-
 .../persistence/metastorage/MetaStorage.java    |  413 ++-
 .../metastorage/MetastorageDataRow.java         |    3 +-
 .../MetastorageLifecycleListener.java           |    4 +-
 .../metastorage/MetastorageRowStore.java        |    7 +-
 .../metastorage/MetastorageTree.java            |   15 +-
 .../UpgradePendingTreeToPerPartitionTask.java   |    4 +-
 .../cache/persistence/package-info.java         |   23 +
 .../cache/persistence/pagemem/PageMemoryEx.java |    6 +-
 .../persistence/pagemem/PageMemoryImpl.java     |   63 +-
 .../cache/persistence/pagemem/README.md         |   24 +
 .../cache/persistence/pagemem/package-info.java |   30 +
 .../partstate/PartitionRecoverState.java        |   52 +
 .../snapshot/IgniteCacheSnapshotManager.java    |    4 -
 .../cache/persistence/tree/BPlusTree.java       |  150 +-
 .../persistence/tree/io/AbstractDataPageIO.java |   79 +-
 .../cache/persistence/tree/io/BPlusIO.java      |   32 +-
 .../cache/persistence/tree/io/BPlusMetaIO.java  |   20 +-
 .../persistence/tree/io/CompactablePageIO.java  |   43 +
 .../persistence/tree/io/DataPagePayload.java    |   16 +
 .../cache/persistence/tree/io/PageIO.java       |  157 +-
 .../persistence/tree/reuse/ReuseListImpl.java   |    5 +-
 .../persistence/tree/util/PageHandler.java      |   43 +-
 .../wal/AbstractWalRecordsIterator.java         |   11 +
 .../cache/persistence/wal/FileWALPointer.java   |    2 +-
 .../wal/FileWriteAheadLogManager.java           | 1134 +-----
 .../wal/FsyncModeFileWriteAheadLogManager.java  | 3464 ------------------
 .../wal/aware/SegmentArchivedStorage.java       |   16 +
 .../persistence/wal/aware/SegmentAware.java     |   13 +-
 .../wal/aware/SegmentCompressStorage.java       |    7 +-
 .../wal/aware/SegmentLockStorage.java           |    2 -
 .../wal/filehandle/AbstractFileHandle.java      |   47 +
 .../wal/filehandle/FileHandleManager.java       |   81 +
 .../filehandle/FileHandleManagerFactory.java    |   90 +
 .../wal/filehandle/FileHandleManagerImpl.java   |  603 +++
 .../wal/filehandle/FileWriteHandle.java         |  113 +
 .../wal/filehandle/FileWriteHandleImpl.java     |  600 +++
 .../filehandle/FsyncFileHandleManagerImpl.java  |  157 +
 .../wal/filehandle/FsyncFileWriteHandle.java    |  844 +++++
 .../wal/reader/IgniteWalIteratorFactory.java    |   45 +-
 .../wal/reader/StandaloneGridKernalContext.java |   16 +
 .../reader/StandaloneWalRecordsIterator.java    |  132 +-
 .../wal/reader/StrictBoundsCheckException.java  |   35 +
 .../wal/serializer/RecordDataV1Serializer.java  |   62 +-
 .../wal/serializer/RecordDataV2Serializer.java  |  141 +-
 .../wal/serializer/RecordSerializerFactory.java |    2 +
 .../serializer/RecordSerializerFactoryImpl.java |    7 +-
 .../wal/serializer/RecordV1Serializer.java      |    5 +-
 .../wal/serializer/RecordV2Serializer.java      |    3 +-
 .../wal/serializer/TxRecordSerializer.java      |  132 +-
 .../query/GridCacheDistributedQueryFuture.java  |    3 -
 .../query/GridCacheDistributedQueryManager.java |    4 -
 .../cache/query/GridCacheQueryAdapter.java      |   30 +-
 .../query/GridCacheQueryFutureAdapter.java      |    5 -
 .../cache/query/GridCacheQueryManager.java      |    9 +-
 .../cache/query/GridCacheQueryRequest.java      |  112 +-
 .../cache/query/GridCacheQueryResponse.java     |   27 +-
 .../query/GridCacheQueryResponseEntry.java      |    1 -
 .../cache/query/GridCacheSqlQuery.java          |    9 +-
 .../cache/query/IgniteQueryErrorCode.java       |    8 +
 .../CacheContinuousQueryBatchAck.java           |   16 +-
 .../continuous/CacheContinuousQueryEntry.java   |    4 +-
 .../CacheContinuousQueryEventBuffer.java        |    1 -
 .../continuous/CacheContinuousQueryHandler.java |   17 +-
 .../CacheContinuousQueryHandlerV3.java          |    2 -
 .../CacheContinuousQueryListener.java           |    7 +-
 .../continuous/CacheContinuousQueryManager.java |   45 +-
 .../store/GridCacheStoreManagerAdapter.java     |    1 -
 .../cache/store/GridCacheWriteBehindStore.java  |    1 -
 .../cache/transactions/IgniteInternalTx.java    |    7 +
 .../transactions/IgniteTransactionsImpl.java    |    1 -
 .../cache/transactions/IgniteTxAdapter.java     |  120 +-
 .../cache/transactions/IgniteTxEntry.java       |    1 -
 .../cache/transactions/IgniteTxHandler.java     |  289 +-
 .../IgniteTxImplicitSingleStateImpl.java        |    5 +
 .../cache/transactions/IgniteTxKey.java         |    2 +-
 .../transactions/IgniteTxLocalAdapter.java      |    5 -
 .../cache/transactions/IgniteTxLocalState.java  |    5 +
 .../cache/transactions/IgniteTxManager.java     |   91 +-
 .../cache/transactions/IgniteTxStateImpl.java   |    7 +-
 .../TransactionProxyRollbackOnlyImpl.java       |    1 -
 .../cache/transactions/TxDeadlockDetection.java |    1 -
 .../cache/transactions/TxLocksRequest.java      |   10 +-
 .../cache/transactions/TxLocksResponse.java     |   18 +-
 .../processors/cache/tree/CacheDataTree.java    |    6 +
 .../cache/tree/mvcc/data/MvccUpdateDataRow.java |   13 +-
 .../cache/verify/IdleVerifyResultV2.java        |   34 +-
 .../verify/VerifyBackupPartitionsDumpTask.java  |   28 +
 .../verify/VerifyBackupPartitionsTaskV2.java    |  128 +-
 .../GridCacheLazyPlainVersionedEntry.java       |    1 -
 .../version/GridCacheRawVersionedEntry.java     |    4 +-
 .../cache/version/GridCacheVersion.java         |    1 -
 .../cache/version/GridCacheVersionManager.java  |    1 -
 .../cacheobject/IgniteCacheObjectProcessor.java |  119 +-
 .../IgniteCacheObjectProcessorImpl.java         |  348 --
 .../cacheobject/UserKeyCacheObjectImpl.java     |    2 +-
 .../processors/cluster/ClusterProcessor.java    |    1 -
 .../cluster/GridClusterStateProcessor.java      |   17 +-
 .../compress/CompressionProcessor.java          |  173 +
 .../processors/compress/FileSystemUtils.java    |  129 +
 .../processors/compress/NativeFileSystem.java   |   50 +
 .../continuous/GridContinuousMessage.java       |    3 +-
 .../continuous/GridContinuousProcessor.java     |    9 +-
 .../processors/continuous/StartRequestData.java |    1 -
 .../datastreamer/DataStreamerImpl.java          |    1 -
 .../datastreamer/DataStreamerRequest.java       |    4 +-
 .../datastreamer/DataStreamerResponse.java      |    2 +-
 .../datastructures/DataStructuresProcessor.java |    4 -
 .../GridCacheAtomicReferenceImpl.java           |    1 -
 .../GridCacheAtomicReferenceValue.java          |    1 -
 .../GridCacheAtomicSequenceImpl.java            |    1 -
 .../GridCacheAtomicStampedImpl.java             |    1 -
 .../GridCacheAtomicStampedValue.java            |    1 -
 .../GridCacheCountDownLatchImpl.java            |    1 -
 .../datastructures/GridCacheLockImpl.java       |    1 -
 .../datastructures/GridCacheQueueAdapter.java   |   36 +-
 .../datastructures/GridCacheQueueProxy.java     |   14 +-
 .../datastructures/GridCacheSetImpl.java        |    6 +-
 .../datastructures/GridSetQueryPredicate.java   |    1 -
 .../processors/failure/FailureProcessor.java    |    9 +-
 .../processors/hadoop/HadoopClassLoader.java    |    2 -
 .../processors/hadoop/HadoopNoopHelper.java     |    1 -
 .../shuffle/HadoopDirectShuffleMessage.java     |    4 +-
 .../hadoop/shuffle/HadoopShuffleMessage.java    |    2 +
 .../igfs/IgfsAbstractOutputStream.java          |    1 -
 .../processors/igfs/IgfsAckMessage.java         |    2 +-
 .../internal/processors/igfs/IgfsBlockKey.java  |    2 +-
 .../processors/igfs/IgfsBlocksMessage.java      |    2 +-
 .../igfs/IgfsCommunicationMessage.java          |    2 +-
 .../processors/igfs/IgfsDataManager.java        |    3 -
 .../processors/igfs/IgfsDeleteMessage.java      |    2 +-
 .../processors/igfs/IgfsDirectoryInfo.java      |    1 -
 .../processors/igfs/IgfsFileAffinityRange.java  |    1 -
 .../internal/processors/igfs/IgfsFileInfo.java  |    1 -
 .../igfs/IgfsFragmentizerRequest.java           |    2 +-
 .../igfs/IgfsFragmentizerResponse.java          |    2 +-
 .../internal/processors/igfs/IgfsImpl.java      |    4 -
 .../processors/igfs/IgfsInputStreamImpl.java    |    2 -
 .../processors/igfs/IgfsIpcHandler.java         |    1 -
 .../processors/igfs/IgfsMetaManager.java        |    2 +-
 .../internal/processors/igfs/IgfsProcessor.java |    1 -
 .../processors/igfs/IgfsSyncMessage.java        |    2 +-
 .../internal/processors/igfs/IgfsUtils.java     |    2 -
 .../igfs/client/IgfsClientAbstractCallable.java |    1 -
 .../processors/job/GridJobProcessor.java        |    3 +-
 ...ClientListenerAbstractConnectionContext.java |   12 +-
 .../odbc/ClientListenerConnectionContext.java   |    6 +
 .../odbc/ClientListenerNioListener.java         |   21 +-
 .../processors/odbc/SqlListenerUtils.java       |    1 -
 .../odbc/jdbc/JdbcBatchExecuteRequest.java      |    1 -
 .../odbc/jdbc/JdbcBulkLoadBatchRequest.java     |    2 -
 .../odbc/jdbc/JdbcConnectionContext.java        |    2 +
 .../odbc/jdbc/JdbcQueryExecuteRequest.java      |    1 -
 .../odbc/jdbc/JdbcRequestHandler.java           |   50 +-
 .../odbc/odbc/OdbcConnectionContext.java        |    2 +
 .../odbc/odbc/OdbcRequestHandler.java           |   12 +-
 .../processors/odbc/odbc/OdbcUtils.java         |   23 +
 .../offheap/GridOffHeapProcessor.java           |    1 -
 .../internal/processors/package-info.java       |    8 +-
 .../platform/PlatformContextImpl.java           |    1 -
 .../processors/platform/PlatformIgnition.java   |    1 -
 .../platform/PlatformNativeException.java       |    1 -
 .../platform/PlatformNoCallbackException.java   |    1 -
 .../processors/platform/PlatformProcessor.java  |    2 +-
 .../platform/PlatformProcessorImpl.java         |    2 +-
 .../processors/platform/PlatformTarget.java     |    1 -
 .../platform/PlatformTargetProxy.java           |    1 -
 .../platform/cache/PlatformCache.java           |    2 +-
 .../cache/affinity/PlatformAffinity.java        |    3 +-
 .../cache/query/PlatformContinuousQuery.java    |    1 -
 .../query/PlatformContinuousQueryImpl.java      |    1 -
 .../callback/PlatformCallbackGateway.java       |    1 -
 .../client/ClientConnectionContext.java         |    2 +
 .../platform/client/ClientRequest.java          |   29 -
 .../platform/client/ClientRequestHandler.java   |   18 +-
 .../platform/client/ClientResourceRegistry.java |    1 -
 .../binary/ClientBinaryTypePutRequest.java      |    1 -
 .../cache/ClientCacheClearKeyRequest.java       |    3 -
 .../cache/ClientCacheClearKeysRequest.java      |    3 -
 .../client/cache/ClientCacheClearRequest.java   |    4 -
 .../cache/ClientCacheContainsKeyRequest.java    |    3 -
 .../cache/ClientCacheContainsKeysRequest.java   |    3 -
 ...ientCacheCreateWithConfigurationRequest.java |    9 +-
 .../cache/ClientCacheCreateWithNameRequest.java |    6 +-
 .../client/cache/ClientCacheDestroyRequest.java |    3 -
 .../client/cache/ClientCacheGetAllRequest.java  |    5 +-
 .../ClientCacheGetAndPutIfAbsentRequest.java    |    3 -
 .../cache/ClientCacheGetAndPutRequest.java      |    3 -
 .../cache/ClientCacheGetAndRemoveRequest.java   |    3 -
 .../cache/ClientCacheGetAndReplaceRequest.java  |    3 -
 ...acheGetOrCreateWithConfigurationRequest.java |    9 +-
 .../ClientCacheGetOrCreateWithNameRequest.java  |    3 -
 .../client/cache/ClientCacheGetRequest.java     |    3 -
 .../client/cache/ClientCacheGetSizeRequest.java |    4 -
 .../cache/ClientCacheLocalPeekRequest.java      |    3 -
 .../cache/ClientCacheNodePartitionsRequest.java |    6 +-
 .../client/cache/ClientCachePutAllRequest.java  |    3 -
 .../cache/ClientCachePutIfAbsentRequest.java    |    3 -
 .../client/cache/ClientCachePutRequest.java     |    3 -
 .../cache/ClientCacheRemoveAllRequest.java      |    4 -
 .../cache/ClientCacheRemoveIfEqualsRequest.java |    3 -
 .../cache/ClientCacheRemoveKeyRequest.java      |    3 -
 .../cache/ClientCacheRemoveKeysRequest.java     |    3 -
 .../ClientCacheReplaceIfEqualsRequest.java      |    3 -
 .../client/cache/ClientCacheReplaceRequest.java |    3 -
 .../client/cache/ClientCacheRequest.java        |   32 -
 .../cache/ClientCacheScanQueryRequest.java      |    3 -
 .../platform/cluster/PlatformClusterGroup.java  |    3 +-
 .../cluster/PlatformClusterNodeFilterImpl.java  |    1 -
 .../platform/compute/PlatformAbstractTask.java  |    2 -
 .../PlatformBalancingMultiClosureTask.java      |    1 -
 .../PlatformBalancingSingleClosureTask.java     |    1 -
 .../platform/compute/PlatformCompute.java       |    2 +-
 .../platform/compute/PlatformFullJob.java       |    2 -
 .../datastreamer/PlatformDataStreamer.java      |    2 +-
 .../PlatformStreamReceiverImpl.java             |    1 -
 .../dotnet/PlatformDotNetCacheStore.java        |    1 -
 .../PlatformDotNetConfigurationClosure.java     |    3 -
 .../platform/events/PlatformEvents.java         |   12 +-
 .../platform/messaging/PlatformMessaging.java   |    1 -
 .../services/PlatformAbstractService.java       |    1 -
 .../platform/services/PlatformServices.java     |    2 -
 .../transactions/PlatformTransactions.java      |    2 +-
 .../utils/PlatformConfigurationUtils.java       |   14 +-
 .../platform/utils/PlatformFutureUtils.java     |    1 -
 .../platform/utils/PlatformUtils.java           |    4 -
 .../websession/PlatformDotNetSessionData.java   |    1 -
 .../PlatformDotNetSessionLockProcessor.java     |    1 -
 .../PlatformDotNetSessionLockResult.java        |    1 -
 .../processors/plugin/CachePluginManager.java   |    4 +-
 .../plugin/IgnitePluginProcessor.java           |    2 -
 .../query/GridQueryCacheObjectsIterator.java    |    1 -
 .../processors/query/GridQueryIndexing.java     |   77 +-
 .../processors/query/GridQueryProcessor.java    |  529 ++-
 .../query/GridQueryTypeDescriptor.java          |    5 +
 .../processors/query/QueryKeyValueIterable.java |   53 +
 .../processors/query/QueryKeyValueIterator.java |   67 +
 .../query/QueryTypeDescriptorImpl.java          |   52 +-
 .../internal/processors/query/QueryUtils.java   |   96 +-
 .../messages/GridQueryNextPageResponse.java     |    4 +-
 .../query/property/QueryBinaryProperty.java     |    9 +-
 .../schema/SchemaIndexCacheVisitorImpl.java     |    4 +-
 .../query/schema/SchemaOperationManager.java    |    1 -
 .../message/SchemaOperationStatusMessage.java   |    2 +
 .../processors/resource/GridResourceIoc.java    |    1 -
 .../resource/GridResourceLoggerInjector.java    |    1 -
 .../processors/rest/GridRestCommand.java        |   12 +
 .../processors/rest/GridRestProcessor.java      |    9 +
 .../processors/rest/GridRestResponse.java       |    1 -
 .../client/message/GridClientCacheRequest.java  |    2 -
 .../message/GridClientTaskResultBean.java       |    1 -
 .../handlers/cache/GridCacheCommandHandler.java |    1 -
 .../cluster/GridBaselineCommandHandler.java     |  205 ++
 .../cluster/GridBaselineCommandResponse.java    |  161 +
 .../handlers/query/QueryCommandHandler.java     |    1 -
 .../redis/GridRedisRestCommandHandler.java      |   10 +-
 .../redis/key/GridRedisDelCommandHandler.java   |    6 +-
 .../key/GridRedisExistsCommandHandler.java      |    6 +-
 .../key/GridRedisExpireCommandHandler.java      |    6 +-
 .../server/GridRedisDbSizeCommandHandler.java   |    6 +-
 .../server/GridRedisFlushCommandHandler.java    |   12 +-
 .../string/GridRedisAppendCommandHandler.java   |    6 +-
 .../string/GridRedisGetCommandHandler.java      |   12 +-
 .../string/GridRedisGetRangeCommandHandler.java |    6 +-
 .../string/GridRedisGetSetCommandHandler.java   |    6 +-
 .../string/GridRedisIncrDecrCommandHandler.java |    6 +-
 .../string/GridRedisMGetCommandHandler.java     |    6 +-
 .../string/GridRedisMSetCommandHandler.java     |    6 +-
 .../string/GridRedisSetCommandHandler.java      |   12 +-
 .../string/GridRedisSetRangeCommandHandler.java |    6 +-
 .../string/GridRedisStrlenCommandHandler.java   |    6 +-
 .../handlers/task/GridTaskResultRequest.java    |    2 +-
 .../handlers/task/GridTaskResultResponse.java   |    2 +-
 .../rest/protocols/GridRestProtocolAdapter.java |    1 -
 .../tcp/GridTcpMemcachedNioListener.java        |    1 -
 .../protocols/tcp/GridTcpRestNioListener.java   |    1 -
 .../rest/protocols/tcp/GridTcpRestProtocol.java |    1 -
 .../tcp/redis/GridRedisNioListener.java         |   24 +-
 .../rest/request/GridRestBaselineRequest.java   |   65 +
 .../security/SecurityContextHolder.java         |   15 +-
 .../service/GridServiceProcessor.java           |   18 -
 .../processors/service/GridServiceProxy.java    |    2 -
 .../processors/service/ServiceContextImpl.java  |    1 -
 .../service/ServiceDescriptorImpl.java          |    1 -
 .../processors/task/GridTaskProcessor.java      |    8 +-
 .../processors/task/GridTaskWorker.java         |    4 -
 .../sql/command/SqlBulkLoadCommand.java         |    1 -
 .../ignite/internal/stat/IndexPageType.java     |   33 +
 .../internal/stat/IoStatisticsHolder.java       |   66 +
 .../internal/stat/IoStatisticsHolderCache.java  |  121 +
 .../internal/stat/IoStatisticsHolderIndex.java  |  168 +
 .../internal/stat/IoStatisticsHolderKey.java    |   91 +
 .../internal/stat/IoStatisticsHolderNoOp.java   |   70 +
 .../internal/stat/IoStatisticsHolderQuery.java  |  128 +
 .../internal/stat/IoStatisticsManager.java      |  204 ++
 .../IoStatisticsMetricsLocalMXBeanImpl.java     |  146 +
 .../internal/stat/IoStatisticsQueryHelper.java  |   98 +
 .../ignite/internal/stat/IoStatisticsType.java  |   36 +
 .../org/apache/ignite/internal/util/F0.java     |    4 +-
 .../apache/ignite/internal/util/GridArrays.java |    1 -
 .../util/GridBoundedConcurrentOrderedMap.java   |    1 -
 .../util/GridBoundedConcurrentOrderedSet.java   |    1 -
 .../internal/util/GridBoundedLinkedHashMap.java |    1 -
 .../internal/util/GridBoundedLinkedHashSet.java |    3 +-
 .../ignite/internal/util/GridByteArrayList.java |    2 +-
 .../internal/util/GridCircularBuffer.java       |    1 -
 .../util/GridConcurrentPhantomHashSet.java      |    2 -
 .../util/GridConcurrentSkipListSet.java         |    2 +-
 .../util/GridConcurrentWeakHashSet.java         |    2 -
 .../ignite/internal/util/GridIntList.java       |    2 +-
 .../ignite/internal/util/GridLeanMap.java       |    3 +-
 .../ignite/internal/util/GridLeanSet.java       |    1 -
 .../ignite/internal/util/GridListSet.java       |    4 -
 .../ignite/internal/util/GridLongList.java      |    2 +
 .../apache/ignite/internal/util/GridMutex.java  |    1 -
 .../ignite/internal/util/GridSetWrapper.java    |    4 -
 .../ignite/internal/util/GridSnapshotLock.java  |    1 -
 .../internal/util/GridSpinReadWriteLock.java    |    2 -
 .../apache/ignite/internal/util/GridUnsafe.java |    1 +
 .../ignite/internal/util/IgniteUtils.java       |  703 ++--
 .../internal/util/OffheapReadWriteLock.java     |    1 -
 .../util/StripedCompositeReadWriteLock.java     |    1 -
 .../util/future/GridCompoundFuture.java         |    4 -
 .../util/future/GridEmbeddedFuture.java         |    2 -
 .../util/future/GridFinishedFuture.java         |    2 -
 .../internal/util/future/GridFutureAdapter.java |   32 +-
 .../internal/util/future/IgniteFutureImpl.java  |    1 -
 .../internal/util/gridify/GridifyUtils.java     |    1 -
 .../internal/util/io/GridUnsafeDataOutput.java  |   76 +-
 .../ipc/shmem/IpcSharedMemoryNativeLoader.java  |    2 -
 .../util/ipc/shmem/IpcSharedMemorySpace.java    |    1 -
 .../ignite/internal/util/lang/GridFunc.java     |   16 +-
 .../util/lang/GridMetadataAwareAdapter.java     |   10 -
 .../ignite/internal/util/lang/GridTriple.java   |    1 -
 .../ignite/internal/util/lang/GridTuple.java    |    2 -
 .../ignite/internal/util/lang/GridTuple3.java   |    2 -
 .../ignite/internal/util/lang/GridTuple4.java   |    2 -
 .../ignite/internal/util/lang/GridTuple5.java   |    2 -
 .../ignite/internal/util/lang/GridTuple6.java   |    2 -
 .../ignite/internal/util/lang/IgnitePair.java   |    1 -
 .../util/lang/IgniteThrowableConsumer.java      |    6 +-
 .../gridfunc/CacheEntryGetValueClosure.java     |    1 -
 .../gridfunc/CacheEntryHasPeekPredicate.java    |    1 -
 .../util/lang/gridfunc/PredicateMapView.java    |    4 -
 .../util/lang/gridfunc/TransformMapView.java    |    4 -
 .../util/lang/gridfunc/TransformMapView2.java   |    4 -
 .../internal/util/nio/GridDirectParser.java     |    6 +-
 .../ignite/internal/util/nio/GridNioServer.java |    7 -
 .../util/offheap/unsafe/GridUnsafeMap.java      |    8 +-
 .../unsafe/GridUnsafePartitionedMap.java        |    1 -
 .../util/tostring/GridToStringBuilder.java      |  103 +-
 .../util/tostring/GridToStringOrder.java        |    2 +-
 .../internal/util/tostring/SBLimitedLength.java |    1 -
 .../apache/ignite/internal/util/typedef/X.java  |    3 -
 .../internal/util/typedef/internal/U.java       |    1 -
 .../internal/util/worker/GridWorkerPool.java    |    2 +-
 .../internal/visor/VisorMultiNodeTask.java      |    2 +-
 .../ignite/internal/visor/cache/VisorCache.java |   20 +-
 .../visor/cache/VisorCacheConfiguration.java    |   38 +
 .../VisorCacheConfigurationCollectorTask.java   |   40 +
 .../cache/VisorCacheToggleStatisticsTask.java   |   72 +
 .../VisorCacheToggleStatisticsTaskArg.java      |   87 +
 .../VisorCacheRebalanceCollectorJobResult.java  |   91 +
 .../node/VisorCacheRebalanceCollectorTask.java  |  194 +
 .../VisorCacheRebalanceCollectorTaskArg.java    |   54 +
 .../VisorCacheRebalanceCollectorTaskResult.java |   92 +
 .../node/VisorExecutorServiceConfiguration.java |    4 +-
 .../visor/node/VisorNodeBaselineStatus.java     |   45 +
 .../visor/node/VisorNodeDataCollectorJob.java   |   77 +-
 .../node/VisorNodeDataCollectorTaskResult.java  |    3 +-
 .../visor/node/VisorPersistenceMetrics.java     |   34 +-
 .../internal/visor/util/VisorTaskUtils.java     |   43 +
 .../internal/visor/verify/CacheFilterEnum.java  |   52 +
 .../verify/VisorIdleVerifyDumpTaskArg.java      |   30 +-
 .../verify/VisorValidateIndexesJobResult.java   |    9 +
 .../verify/VisorValidateIndexesTaskArg.java     |   23 +-
 .../ignite/internal/worker/WorkersRegistry.java |    2 +-
 .../org/apache/ignite/lang/IgniteBiTuple.java   |    3 -
 .../ignite/lang/IgniteProductVersion.java       |    1 -
 .../apache/ignite/logger/java/JavaLogger.java   |    1 -
 .../logger/java/JavaLoggerFileHandler.java      |    1 -
 .../ignite/logger/java/JavaLoggerFormatter.java |    1 -
 .../AbstractNodeNameAwareMarshaller.java        |    1 -
 .../ignite/marshaller/jdk/JdkMarshaller.java    |    1 -
 .../ignite/mxbean/CacheGroupMetricsMXBean.java  |   12 +
 .../ignite/mxbean/DataStorageMetricsMXBean.java |    8 +
 .../mxbean/IoStatisticsMetricsMXBean.java       |  172 +
 .../apache/ignite/mxbean/MXBeanDescription.java |    2 +-
 .../mxbean/MXBeanParametersDescriptions.java    |    2 +-
 .../ignite/mxbean/MXBeanParametersNames.java    |    2 +-
 .../dotnet/PlatformDotNetConfiguration.java     |    1 -
 .../MessageCollectionItemType.java              |    5 +-
 .../extensions/communication/MessageReader.java |    9 +
 .../extensions/communication/MessageWriter.java |   10 +
 .../ignite/services/ServiceConfiguration.java   |    1 -
 .../ignite/spi/IgniteSpiConfiguration.java      |    1 -
 .../ignite/spi/IgniteSpiConsistencyChecked.java |    2 -
 .../spi/IgniteSpiMultipleInstancesSupport.java  |    2 +-
 .../org/apache/ignite/spi/IgniteSpiThread.java  |    1 -
 .../jobstealing/JobStealingCollisionSpi.java    |    2 -
 .../jobstealing/JobStealingRequest.java         |    2 +-
 .../communication/tcp/TcpCommunicationSpi.java  |  109 +-
 .../tcp/messages/HandshakeMessage.java          |    2 +
 .../tcp/messages/HandshakeMessage2.java         |    2 +
 .../tcp/messages/HandshakeWaitMessage.java      |   81 +
 .../tcp/messages/NodeIdMessage.java             |    2 +
 .../messages/RecoveryLastReceivedMessage.java   |    2 +
 .../deployment/local/LocalDeploymentSpi.java    |    1 -
 .../ignite/spi/discovery/DiscoveryDataBag.java  |    6 +
 .../discovery/DiscoverySpiHistorySupport.java   |    1 -
 .../spi/discovery/DiscoverySpiOrderSupport.java |    1 -
 .../ignite/spi/discovery/tcp/ClientImpl.java    |    4 +-
 .../ignite/spi/discovery/tcp/ServerImpl.java    |  100 +-
 .../spi/discovery/tcp/TcpDiscoveryImpl.java     |    2 -
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |   11 +-
 .../tcp/internal/TcpDiscoveryNode.java          |   10 +-
 .../tcp/internal/TcpDiscoveryNodesRing.java     |    2 +-
 .../TcpDiscoveryMulticastIpFinder.java          |    1 -
 .../spi/failover/always/AlwaysFailoverSpi.java  |    1 -
 .../jobstealing/JobStealingFailoverSpi.java     |    1 -
 .../apache/ignite/ssl/SSLContextWrapper.java    |   13 +-
 .../apache/ignite/ssl/SslContextFactory.java    |   16 +-
 .../ignite/startup/cmdline/AboutDialog.java     |    1 -
 .../startup/cmdline/CommandLineStartup.java     |    1 -
 .../startup/cmdline/CommandLineTransformer.java |    1 -
 .../org/apache/ignite/thread/IgniteThread.java  |   44 +-
 .../org/jsr166/ConcurrentLinkedHashMap.java     |   12 +-
 .../resources/META-INF/classnames.properties    |    5 -
 .../GridCacheAffinityBackupsSelfTest.java       |    7 +-
 .../ignite/GridSuppressedExceptionSelfTest.java |    9 +
 .../java/org/apache/ignite/GridTestIoUtils.java |    3 -
 .../org/apache/ignite/GridTestJobContext.java   |    1 -
 .../org/apache/ignite/GridTestTaskSession.java  |    1 -
 .../ignite/IgniteCacheAffinitySelfTest.java     |    7 +-
 ...teCacheEntryProcessorSequentialCallTest.java |   83 +-
 .../cache/IgniteWarmupClosureSelfTest.java      |    7 +-
 .../ignite/cache/LargeEntryUpdateTest.java      |    5 +
 .../ignite/cache/ResetLostPartitionTest.java    |  270 ++
 .../AbstractAffinityFunctionSelfTest.java       |   13 +
 .../affinity/AffinityClientNodeSelfTest.java    |    7 +-
 .../AffinityDistributionLoggingTest.java        |   10 +
 ...ityFunctionBackupFilterAbstractSelfTest.java |    7 +-
 ...unctionExcludeNeighborsAbstractSelfTest.java |    9 +-
 .../affinity/AffinityHistoryCleanupTest.java    |    5 +
 .../local/LocalAffinityFunctionTest.java        |    5 +
 ...ndezvousAffinityFunctionSimpleBenchmark.java |   36 +-
 ...RWThroughDisabledTransactionalCacheTest.java |   17 +
 .../store/CacheStoreReadFromBackupTest.java     |    8 +
 ...cheStoreSessionListenerAbstractSelfTest.java |   12 +-
 ...heStoreSessionListenerLifecycleSelfTest.java |   16 +
 ...nerReadWriteThroughDisabledAbstractTest.java |   10 +
 ...reSessionListenerWriteBehindEnabledTest.java |   18 +
 .../cache/store/CacheStoreWriteErrorTest.java   |  133 +
 ...cheTransactionalStoreReadFromBackupTest.java |    8 +
 .../store/GridCacheBalancingStoreSelfTest.java  |    9 +
 .../GridCacheLoadOnlyStoreAdapterSelfTest.java  |   87 +-
 .../cache/store/GridStoreLoadCacheTest.java     |    5 +
 .../IgniteCacheExpiryStoreLoadSelfTest.java     |   11 +-
 .../store/StoreResourceInjectionSelfTest.java   |    7 +
 .../CacheJdbcPojoStoreAbstractSelfTest.java     |   28 +-
 ...heJdbcPojoStoreBinaryMarshallerSelfTest.java |   10 +
 .../store/jdbc/CacheJdbcPojoStoreTest.java      |    8 +
 ...eJdbcStoreAbstractMultithreadedSelfTest.java |    7 +
 .../CacheJdbcStoreSessionListenerSelfTest.java  |    8 +
 ...CacheJdbcBlobStoreMultithreadedSelfTest.java |   17 +-
 .../jdbc/JdbcTypesDefaultTransformerTest.java   |    5 +
 .../apache/ignite/client/SslParametersTest.java |  162 +-
 .../failure/FailureHandlerTriggeredTest.java    |    5 +
 .../FailureHandlingConfigurationTest.java       |    9 +
 .../ignite/failure/IoomFailureHandlerTest.java  |   36 +-
 .../ignite/failure/OomFailureHandlerTest.java   |    9 +
 .../failure/StopNodeFailureHandlerTest.java     |    5 +
 .../StopNodeOrHaltFailureHandlerTest.java       |    5 +
 .../failure/SystemWorkersBlockingTest.java      |    5 +
 .../failure/SystemWorkersTerminationTest.java   |    5 +
 .../ignite/igfs/IgfsEventsAbstractSelfTest.java |   15 +-
 .../ignite/igfs/IgfsFragmentizerSelfTest.java   |   14 +-
 .../igfs/IgfsFragmentizerTopologySelfTest.java  |    7 +-
 .../apache/ignite/igfs/IgfsPathSelfTest.java    |    8 +-
 .../apache/ignite/internal/ClassSetTest.java    |    9 +-
 .../ClusterBaselineNodesMetricsSelfTest.java    |    5 +
 .../internal/ClusterGroupAbstractTest.java      |   11 +-
 .../internal/ClusterGroupHostsSelfTest.java     |    6 +
 .../ignite/internal/ClusterGroupSelfTest.java   |   16 +-
 .../ignite/internal/ClusterMetricsSelfTest.java |    6 +
 .../internal/ClusterNodeMetricsSelfTest.java    |   11 +-
 .../internal/ClusterNodeMetricsUpdateTest.java  |    5 +
 .../ComputeJobCancelWithServiceSelfTest.java    |    5 +
 .../ignite/internal/GridAffinityMappedTest.java |    5 +
 .../internal/GridAffinityNoCacheSelfTest.java   |    8 +
 .../internal/GridAffinityP2PSelfTest.java       |    9 +-
 .../ignite/internal/GridAffinitySelfTest.java   |    5 +
 .../GridAlwaysFailoverSpiFailSelfTest.java      |   10 +-
 ...chePartitionExchangeManagerHistSizeTest.java |    5 +
 .../internal/GridCancelOnGridStopSelfTest.java  |    7 +-
 .../internal/GridCancelUnusedJobSelfTest.java   |    8 +-
 .../GridCancelledJobsMetricsSelfTest.java       |    5 +
 .../GridCollisionJobsContextSelfTest.java       |    7 +-
 .../internal/GridCommunicationSelfTest.java     |    7 +-
 ...omputationBinarylizableClosuresSelfTest.java |   10 +
 .../GridContinuousJobAnnotationSelfTest.java    |    8 +-
 .../GridContinuousJobSiblingsSelfTest.java      |    8 +-
 .../internal/GridContinuousTaskSelfTest.java    |   11 +
 .../GridDeploymentMultiThreadedSelfTest.java    |    7 +-
 .../ignite/internal/GridDeploymentSelfTest.java |   13 +-
 .../internal/GridDiscoveryEventSelfTest.java    |   11 +-
 .../ignite/internal/GridDiscoverySelfTest.java  |   14 +-
 .../GridEventStorageCheckAllEventsSelfTest.java |   10 +
 .../GridEventStorageDefaultExceptionTest.java   |    6 +
 ...ventStorageRuntimeConfigurationSelfTest.java |   14 +-
 .../internal/GridEventStorageSelfTest.java      |   10 +
 ...ridFailFastNodeFailureDetectionSelfTest.java |    5 +
 .../GridFailedInputParametersSelfTest.java      |   13 +-
 .../GridFailoverCustomTopologySelfTest.java     |    9 +-
 .../ignite/internal/GridFailoverSelfTest.java   |    7 +-
 .../GridFailoverTaskWithPredicateSelfTest.java  |    9 +-
 .../internal/GridFailoverTopologySelfTest.java  |    8 +-
 .../ignite/internal/GridGetOrStartSelfTest.java |    6 +
 .../ignite/internal/GridHomePathSelfTest.java   |    7 +-
 .../GridJobCheckpointCleanupSelfTest.java       |    7 +-
 .../GridJobCollisionCancelSelfTest.java         |    7 +-
 .../ignite/internal/GridJobContextSelfTest.java |    7 +-
 .../GridJobMasterLeaveAwareSelfTest.java        |   23 +-
 .../internal/GridJobServicesAddNodeTest.java    |    5 +
 .../internal/GridJobStealingSelfTest.java       |   23 +-
 .../GridJobStealingZeroActiveJobsSelfTest.java  |    7 +-
 .../internal/GridJobSubjectIdSelfTest.java      |    8 +-
 .../GridKernalConcurrentAccessStopSelfTest.java |    7 +-
 .../internal/GridLifecycleBeanSelfTest.java     |   16 +-
 .../internal/GridListenActorSelfTest.java       |   12 +-
 .../GridLocalEventListenerSelfTest.java         |    7 +-
 .../apache/ignite/internal/GridMBeansTest.java  |    6 +
 .../internal/GridMultipleJobsSelfTest.java      |    8 +-
 .../internal/GridMultipleSpisSelfTest.java      |    8 +-
 .../GridMultipleVersionsDeploymentSelfTest.java |   10 +-
 .../GridMultithreadedJobStealingSelfTest.java   |   15 +-
 .../ignite/internal/GridNodeFilterSelfTest.java |    7 +-
 .../ignite/internal/GridNodeLocalSelfTest.java  |    8 +-
 .../internal/GridNodeMetricsLogPdsSelfTest.java |    9 +-
 .../internal/GridNodeMetricsLogSelfTest.java    |    6 +-
 .../GridNodeVisorAttributesSelfTest.java        |    9 +-
 .../internal/GridNonHistoryMetricsSelfTest.java |    7 +-
 .../GridProjectionForCachesSelfTest.java        |   12 +-
 ...ectionLocalJobMultipleArgumentsSelfTest.java |   10 +-
 .../ignite/internal/GridReduceSelfTest.java     |    8 +-
 .../internal/GridReleaseTypeSelfTest.java       |    8 +-
 .../internal/GridRuntimeExceptionSelfTest.java  |   10 +-
 .../internal/GridSameVmStartupSelfTest.java     |    7 +-
 .../apache/ignite/internal/GridSelfTest.java    |   12 +-
 .../internal/GridSpiExceptionSelfTest.java      |    7 +-
 .../ignite/internal/GridStartStopSelfTest.java  |   11 +-
 .../internal/GridStopWithCancelSelfTest.java    |    7 +-
 .../internal/GridStopWithWaitSelfTest.java      |    8 +-
 .../GridTaskCancelSingleNodeSelfTest.java       |    8 +-
 .../GridTaskContinuousMapperSelfTest.java       |   11 +-
 .../GridTaskExecutionContextSelfTest.java       |    9 +-
 .../internal/GridTaskExecutionSelfTest.java     |    7 +
 .../GridTaskFailoverAffinityRunTest.java        |    8 +-
 .../internal/GridTaskFailoverSelfTest.java      |    8 +-
 .../GridTaskFutureImplStopGridSelfTest.java     |   11 +-
 .../GridTaskInstanceExecutionSelfTest.java      |    7 +-
 .../internal/GridTaskInstantiationSelfTest.java |    7 +-
 .../internal/GridTaskJobRejectSelfTest.java     |    7 +-
 .../internal/GridTaskListenerSelfTest.java      |   10 +-
 .../internal/GridTaskMapAsyncSelfTest.java      |    7 +-
 .../GridTaskNameAnnotationSelfTest.java         |   10 +-
 .../internal/GridTaskResultCacheSelfTest.java   |    9 +-
 .../internal/GridTaskTimeoutSelfTest.java       |   10 +-
 .../GridTopicExternalizableSelfTest.java        |   14 +-
 .../ignite/internal/GridVersionSelfTest.java    |    7 +-
 ...entConnectAfterCommunicationFailureTest.java |   10 +
 .../IgniteClientReconnectApiExceptionTest.java  |    7 +-
 .../IgniteClientReconnectAtomicsTest.java       |   20 +
 .../IgniteClientReconnectBinaryContexTest.java  |    5 +
 .../IgniteClientReconnectCacheTest.java         |   20 +
 .../IgniteClientReconnectCollectionsTest.java   |   12 +
 .../IgniteClientReconnectComputeTest.java       |    9 +-
 ...eClientReconnectContinuousProcessorTest.java |   11 +-
 .../IgniteClientReconnectDelayedSpiTest.java    |    5 +
 ...IgniteClientReconnectDiscoveryStateTest.java |    7 +-
 .../IgniteClientReconnectFailoverTest.java      |   10 +-
 .../IgniteClientReconnectServicesTest.java      |   10 +-
 .../internal/IgniteClientReconnectStopTest.java |    7 +-
 .../IgniteClientReconnectStreamerTest.java      |    8 +-
 .../ignite/internal/IgniteClientRejoinTest.java |    7 +
 .../IgniteComputeEmptyClusterGroupTest.java     |    8 +-
 .../internal/IgniteComputeJobOneThreadTest.java |    5 +
 .../IgniteComputeResultExceptionTest.java       |   16 +
 .../IgniteComputeTopologyExceptionTest.java     |    6 +
 ...eConcurrentEntryProcessorAccessStopTest.java |    5 +
 ...onnectionConcurrentReserveAndRemoveTest.java |    5 +
 .../IgniteDiscoveryMassiveNodeFailTest.java     |   10 +
 .../internal/IgniteExecutorServiceTest.java     |   15 +-
 ...gniteExplicitImplicitDeploymentSelfTest.java |   15 +-
 .../internal/IgniteInternalCacheRemoveTest.java |    7 +-
 .../IgniteLocalNodeMapBeforeStartTest.java      |    5 +
 .../IgniteReflectionFactorySelfTest.java        |    5 +
 ...RoundRobinErrorAfterClientReconnectTest.java |    5 +
 .../IgniteSlowClientDetectionSelfTest.java      |    7 +-
 ...UpdateNotifierPerClusterSettingSelfTest.java |    6 +
 .../internal/LongJVMPauseDetectorTest.java      |    6 +
 .../MarshallerContextLockingSelfTest.java       |    5 +
 .../internal/MemoryLeaksOnRestartNodeTest.java  |    7 +-
 .../internal/SensitiveInfoTestLoggerProxy.java  |    2 -
 .../ignite/internal/TaskNodeRestartTest.java    |    5 +
 .../TransactionMetricsMxBeanImplTest.java       |   20 +-
 .../internal/TransactionsMXBeanImplTest.java    |    5 +
 .../internal/VisorManagementEventSelfTest.java  |    8 +
 .../BinaryArrayIdentityResolverSelfTest.java    |   13 +-
 .../binary/BinaryBasicIdMapperSelfTest.java     |    6 +
 .../binary/BinaryBasicNameMapperSelfTest.java   |    6 +
 .../BinaryConfigurationConsistencySelfTest.java |   12 +
 ...ryConfigurationCustomSerializerSelfTest.java |    5 +
 .../internal/binary/BinaryEnumsSelfTest.java    |   27 +-
 .../binary/BinaryFieldExtractionSelfTest.java   |    9 +-
 .../binary/BinaryFieldsAbstractSelfTest.java    |   37 +-
 .../binary/BinaryFieldsOffheapSelfTest.java     |    4 +-
 .../BinaryFooterOffsetsAbstractSelfTest.java    |    9 +
 .../BinaryFooterOffsetsOffheapSelfTest.java     |    4 +-
 .../binary/BinaryMarshallerSelfTest.java        |  135 +-
 .../BinaryObjectBuilderAdditionalSelfTest.java  |   76 +-
 ...naryObjectBuilderDefaultMappersSelfTest.java |   53 +-
 ...ilderSimpleNameLowerCaseMappersSelfTest.java |    1 -
 .../binary/BinaryObjectExceptionSelfTest.java   |    7 +-
 .../binary/BinaryObjectToStringSelfTest.java    |    5 +
 .../BinaryObjectTypeCompatibilityTest.java      |    6 +-
 .../BinarySerialiedFieldComparatorSelfTest.java |   38 +-
 .../BinarySimpleNameTestPropertySelfTest.java   |    7 +
 .../internal/binary/BinaryTreeSelfTest.java     |   16 +
 .../binary/GridBinaryAffinityKeySelfTest.java   |    8 +-
 ...GridBinaryMarshallerCtxDisabledSelfTest.java |    5 +
 .../binary/GridBinaryWildcardsSelfTest.java     |   31 +-
 ...aultBinaryMappersBinaryMetaDataSelfTest.java |   12 +-
 .../GridBinaryMarshalerAwareTestClass.java      |    1 -
 .../mutabletest/GridBinaryTestClasses.java      |    1 -
 .../AbstractBinaryStreamByteOrderSelfTest.java  |   16 +
 .../streams/BinaryAbstractOutputStreamTest.java |    5 +
 .../commandline/CommandHandlerParsingTest.java  |   74 +-
 ...ByteBufferStreamImplV2ByteOrderSelfTest.java |   21 +-
 .../encryption/EncryptedCacheBigEntryTest.java  |    5 +
 .../encryption/EncryptedCacheCreateTest.java    |    9 +-
 .../encryption/EncryptedCacheDestroyTest.java   |    6 +
 .../EncryptedCacheGroupCreateTest.java          |    6 +
 .../encryption/EncryptedCacheNodeJoinTest.java  |   12 +
 .../EncryptedCachePreconfiguredRestartTest.java |    6 +
 .../encryption/EncryptedCacheRestartTest.java   |    5 +
 ...GridManagerLocalMessageListenerSelfTest.java |    7 +
 ...dManagerMxBeanIllegalArgumentHandleTest.java |    9 +
 .../managers/GridManagerStopSelfTest.java       |   14 +-
 .../managers/GridNoopManagerSelfTest.java       |    7 +-
 .../managers/IgniteDiagnosticMessagesTest.java  |  200 +-
 .../GridCheckpointManagerSelfTest.java          |   12 +-
 .../checkpoint/GridCheckpointTaskSelfTest.java  |    8 +-
 ...idCommunicationManagerListenersSelfTest.java |   12 +-
 .../GridCommunicationSendMessageSelfTest.java   |    9 +-
 .../communication/GridIoManagerSelfTest.java    |   10 +-
 ...unicationBalanceMultipleConnectionsTest.java |    5 -
 .../IgniteCommunicationBalanceTest.java         |    7 +
 .../communication/IgniteIoTestMessagesTest.java |    5 +
 .../IgniteVariousConnectionNumberTest.java      |    5 +
 ...mentRequestOfUnknownClassProcessingTest.java |  156 +
 .../GridDeploymentManagerStopSelfTest.java      |    7 +-
 .../GridDeploymentMessageCountSelfTest.java     |   60 +-
 .../GridDiscoveryManagerAliveCacheSelfTest.java |    6 +
 .../GridDiscoveryManagerAttributesSelfTest.java |   49 +-
 .../IgniteTopologyPrintFormatSelfTest.java      |   12 +-
 .../events/GridEventStorageManagerSelfTest.java |    9 +-
 .../OptimizedMarshallerEnumSelfTest.java        |    7 +-
 .../OptimizedMarshallerNodeFailoverTest.java    |    9 +-
 .../optimized/OptimizedMarshallerSelfTest.java  |   11 +-
 ...arshallerSerialPersistentFieldsSelfTest.java |    7 +-
 .../optimized/OptimizedMarshallerTest.java      |   86 +-
 .../OptimizedObjectStreamSelfTest.java          |   84 +-
 .../pagemem/impl/PageIdUtilsSelfTest.java       |   10 +
 .../pagemem/impl/PageMemoryNoLoadSelfTest.java  |    9 +
 .../GridCacheTxLoadFromStoreOnLockSelfTest.java |   16 +-
 .../GridAffinityProcessorAbstractSelfTest.java  |   10 +-
 .../GridAffinityProcessorMemoryLeakTest.java    |    5 +
 .../Authentication1kUsersNodeRestartTest.java   |   82 +-
 .../AuthenticationConfigurationClusterTest.java |   24 +
 .../AuthenticationOnNotActiveClusterTest.java   |   21 +
 .../AuthenticationProcessorNPEOnStartTest.java  |    5 +
 .../AuthenticationProcessorNodeRestartTest.java |   23 +
 .../AuthenticationProcessorSelfTest.java        |   33 +
 .../AtomicCacheAffinityConfigurationTest.java   |    7 +
 ...ataRegistrationInsideEntryProcessorTest.java |    7 +-
 .../cache/CacheAffinityCallSelfTest.java        |    7 +
 .../CacheAtomicSingleMessageCountSelfTest.java  |    7 +
 .../cache/CacheClientStoreSelfTest.java         |   23 +-
 .../processors/cache/CacheComparatorTest.java   |    5 +
 .../cache/CacheConcurrentReadThroughTest.java   |   14 +-
 .../cache/CacheConfigurationLeakTest.java       |    5 +
 .../cache/CacheConnectionLeakStoreTxTest.java   |   37 +-
 .../cache/CacheDataRegionConfigurationTest.java |   14 +
 .../cache/CacheDeferredDeleteQueueTest.java     |   18 +
 .../CacheDeferredDeleteSanitySelfTest.java      |   37 +
 ...cheDhtLocalPartitionAfterRemoveSelfTest.java |    7 +-
 .../cache/CacheEntryProcessorCopySelfTest.java  |    6 +
 .../cache/CacheEnumOperationsAbstractTest.java  |   23 +-
 .../cache/CacheEventWithTxLabelTest.java        |  502 +++
 ...CacheExchangeMessageDuplicatedStateTest.java |    5 +
 .../cache/CacheFutureExceptionSelfTest.java     |   13 +-
 .../cache/CacheGetEntryAbstractTest.java        |   16 +-
 ...GetEntryOptimisticReadCommittedSelfTest.java |   36 +
 ...GetEntryOptimisticReadCommittedSeltTest.java |   36 -
 ...etEntryOptimisticRepeatableReadSelfTest.java |   36 +
 ...etEntryOptimisticRepeatableReadSeltTest.java |   36 -
 ...eGetEntryOptimisticSerializableSelfTest.java |   36 +
 ...eGetEntryOptimisticSerializableSeltTest.java |   36 -
 ...etEntryPessimisticReadCommittedSelfTest.java |   36 +
 ...etEntryPessimisticReadCommittedSeltTest.java |   36 -
 ...tEntryPessimisticRepeatableReadSelfTest.java |  113 +
 ...tEntryPessimisticRepeatableReadSeltTest.java |   40 -
 ...GetEntryPessimisticSerializableSelfTest.java |   36 +
 ...GetEntryPessimisticSerializableSeltTest.java |   36 -
 .../processors/cache/CacheGetFromJobTest.java   |    7 +-
 .../CacheGetsDistributionAbstractTest.java      |  383 ++
 .../CacheGroupLocalConfigurationSelfTest.java   |    6 +
 .../cache/CacheGroupMetricsMBeanTest.java       |   26 +-
 .../cache/CacheGroupsMetricsRebalanceTest.java  |   11 +-
 ...erceptorPartitionCounterLocalSanityTest.java |   35 +-
 ...torPartitionCounterRandomOperationsTest.java |  132 +-
 .../cache/CacheKeepBinaryTransactionTest.java   |   15 +-
 .../cache/CacheMetricsEntitiesCountTest.java    |   52 +-
 .../CacheMetricsForClusterGroupSelfTest.java    |  116 +-
 .../cache/CacheMetricsManageTest.java           |   25 +-
 .../cache/CacheMvccTxFastFinishTest.java        |   67 +
 .../processors/cache/CacheNamesSelfTest.java    |    5 +
 .../CacheNamesWithSpecialCharactersTest.java    |   14 +-
 .../cache/CacheNearReaderUpdateTest.java        |   14 +
 ...cheNearUpdateTopologyChangeAbstractTest.java |    7 +-
 .../cache/CacheNoAffinityExchangeTest.java      |  317 ++
 .../cache/CacheOffheapMapEntrySelfTest.java     |   21 +-
 ...cheOptimisticTransactionsWithFilterTest.java |    8 +
 .../CachePutEventListenerErrorSelfTest.java     |   11 +
 .../processors/cache/CachePutIfAbsentTest.java  |    9 +
 .../CacheReadThroughLocalRestartSelfTest.java   |    8 +
 .../cache/CacheReadThroughRestartSelfTest.java  |   21 +-
 .../CacheRebalanceConfigValidationTest.java     |    5 +
 .../cache/CacheRebalancingSelfTest.java         |   20 +-
 .../cache/CacheRemoveAllSelfTest.java           |   18 +-
 .../CacheSerializableTransactionsTest.java      |  126 +-
 .../CacheStartupInDeploymentModesTest.java      |    6 +
 .../cache/CacheStopAndDestroySelfTest.java      |   37 +
 ...eUsageMultinodeDynamicStartAbstractTest.java |   16 +-
 ...heStoreUsageMultinodeDynamicStartTxTest.java |    8 +
 ...reUsageMultinodeStaticStartAbstractTest.java |   17 +-
 ...cheStoreUsageMultinodeStaticStartTxTest.java |    8 +
 .../processors/cache/CacheTxFastFinishTest.java |   14 +-
 .../CacheTxNotAllowReadFromBackupTest.java      |   80 +-
 .../cache/CacheValidatorMetricsTest.java        |    8 +
 .../cache/ClusterReadOnlyModeAbstractTest.java  |   11 +-
 .../cache/ClusterReadOnlyModeTest.java          |    6 +
 .../cache/ClusterStateAbstractTest.java         |   66 +-
 .../cache/ConcurrentCacheStartTest.java         |    5 +
 .../processors/cache/CrossCacheLockTest.java    |   13 +
 .../cache/CrossCacheTxRandomOperationsTest.java |   32 +-
 .../DataStorageConfigurationValidationTest.java |    7 +
 .../EntryVersionConsistencyReadThroughTest.java |   32 +
 ...idAbstractCacheInterceptorRebalanceTest.java |   17 +-
 ...ridCacheAbstractByteArrayValuesSelfTest.java |    6 -
 .../GridCacheAbstractFailoverSelfTest.java      |    6 +
 .../GridCacheAbstractFailoverTxSelfTest.java    |   19 +-
 ...cheAbstractFullApiMultithreadedSelfTest.java |   19 +-
 .../cache/GridCacheAbstractFullApiSelfTest.java |  164 +-
 .../GridCacheAbstractIteratorsSelfTest.java     |   14 +-
 .../GridCacheAbstractLocalStoreSelfTest.java    |   18 +-
 .../cache/GridCacheAbstractMetricsSelfTest.java |   41 +-
 .../GridCacheAbstractRemoveFailureTest.java     |   10 +-
 .../cache/GridCacheAbstractSelfTest.java        |    6 +-
 .../cache/GridCacheAbstractTxReadTest.java      |   13 +-
 ...acheAbstractUsersAffinityMapperSelfTest.java |    7 +-
 .../cache/GridCacheAffinityApiSelfTest.java     |   17 +-
 .../cache/GridCacheAffinityMapperSelfTest.java  |    9 +-
 .../cache/GridCacheAffinityRoutingSelfTest.java |   12 +
 .../GridCacheAsyncOperationsLimitSelfTest.java  |    7 +-
 ...eAtomicEntryProcessorDeploymentSelfTest.java |   17 +
 .../GridCacheAtomicMessageCountSelfTest.java    |    8 +-
 .../cache/GridCacheBasicApiAbstractTest.java    |   45 +-
 .../cache/GridCacheBasicStoreAbstractTest.java  |   25 +-
 ...acheBasicStoreMultithreadedAbstractTest.java |    7 +-
 .../cache/GridCacheClearAllSelfTest.java        |   17 +-
 .../cache/GridCacheClearLocallySelfTest.java    |   14 +-
 .../cache/GridCacheClearSelfTest.java           |   16 +
 ...GridCacheConcurrentGetCacheOnClientTest.java |    5 +
 .../cache/GridCacheConcurrentMapSelfTest.java   |   10 +-
 .../GridCacheConcurrentTxMultiNodeLoadTest.java |   10 +-
 .../GridCacheConditionalDeploymentSelfTest.java |    7 +
 ...idCacheConfigurationConsistencySelfTest.java |   58 +-
 ...ridCacheConfigurationValidationSelfTest.java |    8 +-
 .../GridCacheDaemonNodeAbstractSelfTest.java    |    7 +
 .../cache/GridCacheDeploymentSelfTest.java      |   17 +-
 .../cache/GridCacheEntryMemorySizeSelfTest.java |   38 +-
 .../cache/GridCacheEntryVersionSelfTest.java    |   19 +-
 .../GridCacheEvictionEventAbstractTest.java     |   18 +-
 .../GridCacheFinishPartitionsSelfTest.java      |   18 +-
 ...CacheFullTextQueryMultithreadedSelfTest.java |    5 +
 .../cache/GridCacheGenericTestStore.java        |    1 -
 ...idCacheGetAndTransformStoreAbstractTest.java |   17 +-
 .../cache/GridCacheIncrementTransformTest.java  |    8 +-
 .../GridCacheInterceptorAbstractSelfTest.java   |   43 +-
 .../GridCacheInterceptorLocalSelfTest.java      |   13 +-
 ...dCacheInterceptorLocalWithStoreSelfTest.java |   13 +-
 .../GridCacheInterceptorReplicatedSelfTest.java |    1 -
 .../cache/GridCacheInterceptorSelfTest.java     |    1 -
 ...heInterceptorTransactionalRebalanceTest.java |    6 +
 .../cache/GridCacheIteratorPerformanceTest.java |    9 +-
 .../cache/GridCacheKeyCheckSelfTest.java        |   12 +-
 .../processors/cache/GridCacheLeakTest.java     |    6 +
 .../cache/GridCacheLifecycleAwareSelfTest.java  |    7 +-
 .../GridCacheLocalTxStoreExceptionSelfTest.java |    8 +
 .../GridCacheMarshallerTxAbstractTest.java      |    7 +-
 .../GridCacheMarshallingNodeJoinSelfTest.java   |   17 +-
 .../GridCacheMissingCommitVersionSelfTest.java  |    5 +
 ...GridCacheMixedPartitionExchangeSelfTest.java |   16 +-
 .../cache/GridCacheMultiUpdateLockSelfTest.java |    8 +-
 ...ridCacheMultinodeUpdateAbstractSelfTest.java |   24 +-
 ...ultinodeUpdateAtomicNearEnabledSelfTest.java |    1 -
 ...inodeUpdateNearEnabledNoBackupsSelfTest.java |   11 +-
 ...CacheMultinodeUpdateNearEnabledSelfTest.java |   24 +-
 .../cache/GridCacheMultinodeUpdateSelfTest.java |    1 -
 .../cache/GridCacheMvccFlagsTest.java           |    8 +-
 .../cache/GridCacheMvccManagerSelfTest.java     |    9 +-
 ...ridCacheMvccMultiThreadedUpdateSelfTest.java |  203 +
 .../cache/GridCacheMvccPartitionedSelfTest.java |   20 +
 .../processors/cache/GridCacheMvccSelfTest.java |   33 +-
 .../cache/GridCacheNestedTxAbstractTest.java    |    9 +-
 .../cache/GridCacheObjectToStringSelfTest.java  |   22 +-
 ...HeapMultiThreadedUpdateAbstractSelfTest.java |   10 +-
 ...CacheOffHeapMultiThreadedUpdateSelfTest.java |    9 +
 .../cache/GridCacheOffheapUpdateSelfTest.java   |   25 +-
 .../GridCacheOnCopyFlagAbstractSelfTest.java    |    6 +
 .../GridCacheOrderedPreloadingSelfTest.java     |   10 +-
 .../cache/GridCacheP2PUndeploySelfTest.java     |   17 +-
 .../cache/GridCachePartitionedGetSelfTest.java  |   16 +-
 ...hePartitionedProjectionAffinitySelfTest.java |    9 +-
 .../cache/GridCachePartitionedWritesTest.java   |   13 +-
 .../GridCachePreloadingEvictionsSelfTest.java   |   10 +-
 .../cache/GridCachePutAllFailoverSelfTest.java  |   17 +-
 .../GridCacheQueryIndexingDisabledSelfTest.java |   10 +-
 .../GridCacheQueryInternalKeysSelfTest.java     |    7 +-
 ...ridCacheQuerySqlFieldInlineSizeSelfTest.java |   12 +-
 .../GridCacheReferenceCleanupSelfTest.java      |   39 +-
 .../cache/GridCacheReloadSelfTest.java          |   33 +-
 ...ridCacheReplicatedSynchronousCommitTest.java |    8 +-
 .../GridCacheReturnValueTransferSelfTest.java   |    8 +-
 .../cache/GridCacheSlowTxWarnTest.java          |    7 +-
 .../processors/cache/GridCacheStopSelfTest.java |   92 +-
 ...ridCacheStoreManagerDeserializationTest.java |   20 +-
 .../cache/GridCacheStorePutxSelfTest.java       |  159 -
 .../cache/GridCacheStoreValueBytesSelfTest.java |    7 +-
 .../cache/GridCacheSwapPreloadSelfTest.java     |  245 --
 ...acheTcpClientDiscoveryMultiThreadedTest.java |    7 +-
 .../processors/cache/GridCacheTestEntryEx.java  |   11 +-
 ...cheTransactionalAbstractMetricsSelfTest.java |   31 +
 .../GridCacheTtlManagerEvictionSelfTest.java    |   18 +-
 .../cache/GridCacheTtlManagerLoadTest.java      |    5 +
 .../GridCacheTtlManagerNotificationTest.java    |    9 +-
 .../cache/GridCacheTtlManagerSelfTest.java      |   17 +-
 ...ridCacheTxPartitionedLocalStoreSelfTest.java |    8 +
 .../cache/GridCacheUtilsSelfTest.java           |    7 +-
 .../GridCacheValueBytesPreloadingSelfTest.java  |    7 +-
 ...idCacheValueConsistencyAbstractSelfTest.java |   22 +-
 ...heValueConsistencyTransactionalSelfTest.java |    5 +-
 .../GridCacheVariableTopologySelfTest.java      |   18 +-
 .../cache/GridCacheVersionMultinodeTest.java    |   47 +-
 .../cache/GridCacheVersionSelfTest.java         |    8 +-
 .../GridCacheVersionTopologyChangeTest.java     |   18 +-
 ...StorageConfigurationConsistencySelfTest.java |    5 +
 .../cache/GridEvictionPolicyMBeansTest.java     |   37 +-
 ...calCacheStoreManagerDeserializationTest.java |    6 +
 .../cache/GridLocalIgniteSerializationTest.java |    8 +
 ...ProjectionForCachesOnDaemonNodeSelfTest.java |    7 +
 ...IgniteAbstractDynamicCacheStartFailTest.java | 1986 ++++++----
 .../IgniteCacheAbstractStopBusySelfTest.java    |   12 +-
 .../IgniteCacheAtomicStopBusySelfTest.java      |   10 +-
 ...IgniteCacheBinaryEntryProcessorSelfTest.java |    8 +
 .../IgniteCacheBinaryObjectsScanSelfTest.java   |    5 +
 .../IgniteCacheConfigVariationsFullApiTest.java |  155 +-
 ...teCacheConfigurationDefaultTemplateTest.java |    7 +-
 .../IgniteCacheConfigurationTemplateTest.java   |   12 +-
 .../IgniteCacheContainsKeyAbstractSelfTest.java |    8 +-
 .../cache/IgniteCacheContainsKeyAtomicTest.java |    6 +
 ...niteCacheCopyOnReadDisabledAbstractTest.java |    5 +
 .../cache/IgniteCacheCreateRestartSelfTest.java |    5 +
 .../cache/IgniteCacheDynamicStopSelfTest.java   |    6 +
 .../IgniteCacheEntryListenerAbstractTest.java   |   22 +-
 ...eCacheEntryListenerEagerTtlDisabledTest.java |    8 +
 ...niteCacheEntryListenerExpiredEventsTest.java |    6 +
 .../IgniteCacheEntryListenerTxLocalTest.java    |    8 +
 .../IgniteCacheEntryProcessorCallTest.java      |   60 +-
 .../IgniteCacheEntryProcessorNodeJoinTest.java  |  137 +-
 ...niteCacheExpireAndUpdateConsistencyTest.java |   10 +
 ...IgniteCacheGetCustomCollectionsSelfTest.java |    5 +
 .../processors/cache/IgniteCacheGroupsTest.java |  334 +-
 .../cache/IgniteCacheIncrementTxTest.java       |    7 +
 .../IgniteCacheInterceptorSelfTestSuite.java    |   57 +-
 .../cache/IgniteCacheInvokeAbstractTest.java    |   24 +-
 ...iteCacheInvokeReadThroughSingleNodeTest.java |   65 +
 .../cache/IgniteCacheInvokeReadThroughTest.java |   77 +
 ...gniteCacheLoadRebalanceEvictionSelfTest.java |    5 +
 .../IgniteCacheManyAsyncOperationsTest.java     |    7 +-
 .../cache/IgniteCacheMvccTxInvokeTest.java      |   59 +
 .../IgniteCacheMvccTxNearEnabledInvokeTest.java |   37 +
 .../cache/IgniteCacheNearLockValueSelfTest.java |   10 +-
 .../cache/IgniteCacheNoSyncForGetTest.java      |   15 +
 .../cache/IgniteCacheObjectPutSelfTest.java     |    6 +
 .../IgniteCacheP2pUnmarshallingErrorTest.java   |    7 +-
 ...gniteCacheP2pUnmarshallingNearErrorTest.java |    7 +-
 ...CacheP2pUnmarshallingRebalanceErrorTest.java |    5 +
 .../IgniteCacheP2pUnmarshallingTxErrorTest.java |    7 +-
 .../IgniteCachePartitionMapUpdateTest.java      |   10 +-
 .../cache/IgniteCachePeekModesAbstractTest.java |   10 +
 .../cache/IgniteCachePutAllRestartTest.java     |    8 +-
 .../IgniteCachePutStackOverflowSelfTest.java    |    7 +
 .../IgniteCacheReadThroughEvictionSelfTest.java |   24 +
 ...acheReadThroughEvictionsVariationsSuite.java |    3 +-
 .../IgniteCacheReadThroughStoreCallTest.java    |   15 +
 ...iteCacheScanPredicateDeploymentSelfTest.java |    5 +
 .../cache/IgniteCacheSerializationSelfTest.java |    5 +
 .../cache/IgniteCacheStartStopLoadTest.java     |    5 +
 .../processors/cache/IgniteCacheStartTest.java  |    7 +
 .../cache/IgniteCacheStoreCollectionTest.java   |   33 +-
 .../IgniteCacheStoreValueAbstractTest.java      |    6 +
 ...gniteCacheTransactionalStopBusySelfTest.java |   10 +-
 .../IgniteCacheTxCopyOnReadDisabledTest.java    |   11 +-
 .../cache/IgniteCacheTxLocalInvokeTest.java     |    8 +
 .../cache/IgniteCacheTxLocalPeekModesTest.java  |   12 +-
 .../cache/IgniteCacheTxLocalStoreValueTest.java |   12 +-
 .../IgniteCacheTxNearEnabledStoreValueTest.java |   12 +-
 .../cache/IgniteCacheTxNearPeekModesTest.java   |   17 +
 .../cache/IgniteCacheTxPeekModesTest.java       |   10 +-
 .../cache/IgniteCacheTxPreloadNoWriteTest.java  |    8 +-
 .../cache/IgniteCacheTxStoreValueTest.java      |   12 +-
 .../cache/IgniteCachingProviderSelfTest.java    |    8 +-
 .../IgniteClientAffinityAssignmentSelfTest.java |    7 +-
 ...IgniteClientCacheInitializationFailTest.java |  107 +-
 .../IgniteClientCacheStartFailoverTest.java     |   50 +-
 .../IgniteClusterActivateDeactivateTest.java    |   57 +-
 ...erActivateDeactivateTestWithPersistence.java |   61 +-
 .../IgniteDaemonNodeMarshallerCacheTest.java    |    8 +-
 .../cache/IgniteDynamicCacheAndNodeStop.java    |    5 +
 .../cache/IgniteDynamicCacheFilterTest.java     |    7 +
 .../cache/IgniteDynamicCacheMultinodeTest.java  |    6 +
 ...ynamicCacheStartCoordinatorFailoverTest.java |  524 +--
 ...ynamicCacheStartFailWithPersistenceTest.java |    8 +
 ...eDynamicCacheStartNoExchangeTimeoutTest.java |   50 +-
 .../cache/IgniteDynamicCacheStartSelfTest.java  |   46 +
 ...niteDynamicCacheStartStopConcurrentTest.java |    5 +
 ...niteDynamicCacheWithConfigStartSelfTest.java |    9 +-
 .../IgniteDynamicClientCacheStartSelfTest.java  |   27 +-
 .../cache/IgniteExchangeFutureHistoryTest.java  |    7 +-
 ...IgniteGetNonPlainKeyReadThroughSelfTest.java |  161 +
 .../IgniteIncompleteCacheObjectSelfTest.java    |    5 +
 .../cache/IgniteInternalCacheTypesTest.java     |    5 +
 ...iteMarshallerCacheClassNameConflictTest.java |    5 +
 ...lerCacheClientRequestsMappingOnMissTest.java |    9 +
 ...eMarshallerCacheConcurrentReadWriteTest.java |    5 +
 .../IgniteMarshallerCacheFSRestoreTest.java     |    6 +
 .../IgniteMvccTxMultiThreadedAbstractTest.java  |  132 +
 .../IgniteMvccTxSingleThreadedAbstractTest.java |   56 +
 .../cache/IgniteNearClientCacheCloseTest.java   |   33 +
 .../cache/IgniteOnePhaseCommitInvokeTest.java   |    5 +
 .../IgniteOnePhaseCommitNearReadersTest.java    |    8 +
 .../cache/IgniteOnePhaseCommitNearSelfTest.java |    5 +
 .../cache/IgniteOutOfMemoryPropagationTest.java |    6 +
 .../cache/IgnitePdsDataRegionMetricsTxTest.java |   56 +
 .../cache/IgnitePutAllLargeBatchSelfTest.java   |   26 +-
 ...tAllUpdateNonPreloadedPartitionSelfTest.java |   15 +-
 .../IgniteStartCacheInTransactionSelfTest.java  |   16 +-
 .../cache/IgniteStaticCacheStartSelfTest.java   |    7 +-
 .../cache/IgniteSystemCacheOnClientTest.java    |    7 +-
 ...gniteTopologyValidatorAbstractCacheTest.java |    5 +
 ...ologyValidatorAbstractTxCacheGroupsTest.java |   70 +-
 ...iteTopologyValidatorAbstractTxCacheTest.java |   43 +-
 ...opologyValidatorCacheGroupsAbstractTest.java |    5 +
 ...niteTopologyValidatorGridSplitCacheTest.java |   10 +
 ...lidatorNearPartitionedTxCacheGroupsTest.java |    8 +
 ...logyValidatorNearPartitionedTxCacheTest.java |    8 +
 .../processors/cache/IgniteTxAbstractTest.java  |   16 +-
 .../IgniteTxConcurrentGetAbstractTest.java      |    7 +-
 .../cache/IgniteTxConfigCacheSelfTest.java      |   14 +-
 .../IgniteTxExceptionAbstractSelfTest.java      |   37 +-
 .../cache/IgniteTxMultiNodeAbstractTest.java    |   22 +-
 .../IgniteTxMultiThreadedAbstractTest.java      |   19 +-
 .../cache/IgniteTxReentryAbstractSelfTest.java  |    7 +-
 .../IgniteTxSingleThreadedAbstractTest.java     |   19 +-
 .../IgniteTxStoreExceptionAbstractSelfTest.java |   23 +-
 ...rceptorCacheConfigVariationsFullApiTest.java |    9 +-
 .../MarshallerCacheJobRunNodeRestartTest.java   |    5 +
 .../cache/MemoryPolicyConfigValidationTest.java |   14 +
 .../cache/MvccCacheGroupMetricsMBeanTest.java   |   29 +
 ...AffinityCoordinatorDynamicStartStopTest.java |    5 +
 ...heapCacheMetricsForClusterGroupSelfTest.java |   13 +-
 ...titionedAtomicCacheGetsDistributionTest.java |   24 +-
 ...cTxPessimisticCacheGetsDistributionTest.java |   32 +
 ...onalOptimisticCacheGetsDistributionTest.java |   17 +-
 ...nalPessimisticCacheGetsDistributionTest.java |   24 +-
 ...rtitionsExchangeCoordinatorFailoverTest.java |    6 +
 ...sExchangeOnDiscoveryHistoryOverflowTest.java |    5 +
 ...plicatedAtomicCacheGetsDistributionTest.java |  329 +-
 ...cTxPessimisticCacheGetsDistributionTest.java |   32 +
 ...onalOptimisticCacheGetsDistributionTest.java |    9 +-
 ...nalPessimisticCacheGetsDistributionTest.java |   24 +-
 .../SetTxTimeoutOnPartitionMapExchangeTest.java |   10 +-
 .../cache/WalModeChangeAbstractSelfTest.java    |   62 +-
 .../cache/WalModeChangeAdvancedSelfTest.java    |   27 +-
 .../cache/WithKeepBinaryCacheFullApiTest.java   |   19 +-
 .../binary/BinaryMetadataUpdatesFlowTest.java   |  538 ++-
 .../BinaryTxCacheLocalEntriesSelfTest.java      |    5 +
 .../CacheKeepBinaryWithInterceptorTest.java     |   46 +-
 ...yAtomicEntryProcessorDeploymentSelfTest.java |    8 +
 ...naryObjectMetadataExchangeMultinodeTest.java |  129 +-
 ...acheBinaryObjectUserClassloaderSelfTest.java |    6 +
 ...naryObjectsAbstractDataStreamerSelfTest.java |    5 +
 ...aryObjectsAbstractMultiThreadedSelfTest.java |    8 +-
 .../GridCacheBinaryObjectsAbstractSelfTest.java |   93 +
 .../GridCacheBinaryStoreAbstractSelfTest.java   |   10 +
 ...ntNodeBinaryObjectMetadataMultinodeTest.java |   11 +-
 ...CacheClientNodeBinaryObjectMetadataTest.java |    5 +
 ...treamProcessorPersistenceBinarySelfTest.java |   28 +
 .../GridDataStreamerImplSelfTest.java           |   10 +-
 ...IgniteCacheAbstractExecutionContextTest.java |    5 +
 ...iteCachePartitionedExecutionContextTest.java |   44 -
 ...eAbstractDataStructuresFailoverSelfTest.java |   55 +-
 ...actQueueFailoverDataConsistencySelfTest.java |   10 +-
 ...CacheAtomicReferenceApiSelfAbstractTest.java |   12 +-
 ...cheAtomicReferenceMultiNodeAbstractTest.java |    8 +-
 ...idCacheAtomicStampedApiSelfAbstractTest.java |   11 +-
 .../GridCacheQueueApiSelfAbstractTest.java      |  226 +-
 .../GridCacheQueueCleanupSelfTest.java          |    8 +-
 .../GridCacheQueueClientDisconnectTest.java     |  259 +-
 ...ridCacheQueueJoinedNodeSelfAbstractTest.java |    7 +-
 ...GridCacheQueueMultiNodeAbstractSelfTest.java |   16 +-
 ...dCacheQueueMultiNodeConsistencySelfTest.java |   10 +-
 ...CacheQueueRotativeMultiNodeAbstractTest.java |    9 +-
 .../GridCacheSequenceApiSelfAbstractTest.java   |   20 +-
 ...dCacheSequenceMultiNodeAbstractSelfTest.java |    9 +-
 .../GridCacheSetAbstractSelfTest.java           |   60 +-
 .../GridCacheSetFailoverAbstractSelfTest.java   |    5 +
 .../IgniteAtomicLongApiAbstractSelfTest.java    |   19 +-
 .../IgniteClientDataStructuresAbstractTest.java |   11 +
 .../IgniteCountDownLatchAbstractSelfTest.java   |    9 +
 .../IgniteDataStructureUniqueNameTest.java      |    8 +
 .../IgniteDataStructureWithJobTest.java         |    7 +-
 ...ExchangeLatchManagerCoordinatorFailTest.java |    7 +
 .../IgniteLockAbstractSelfTest.java             |   20 +
 .../IgniteSemaphoreAbstractSelfTest.java        |    9 +
 .../IgniteSequenceInternalCleanupTest.java      |    5 +
 .../SemaphoreFailoverNoWaitingAcquirerTest.java |    8 +-
 ...SemaphoreFailoverSafeReleasePermitsTest.java |    6 +
 .../IgniteLocalCountDownLatchSelfTest.java      |    7 +-
 .../local/IgniteLocalLockSelfTest.java          |    5 +
 .../local/IgniteLocalSemaphoreSelfTest.java     |    5 +
 ...titionedAtomicSequenceMultiThreadedTest.java |   19 +-
 ...achePartitionedAtomicSequenceTxSelfTest.java |    8 +-
 ...chePartitionedAtomicSetFailoverSelfTest.java |    5 +
 ...rtitionedDataStructuresFailoverSelfTest.java |   14 -
 ...idCachePartitionedNodeRestartTxSelfTest.java |    9 +-
 ...PartitionedQueueCreateMultiNodeSelfTest.java |    6 +
 ...dCachePartitionedQueueEntryMoveSelfTest.java |    7 +-
 ...GridCachePartitionedSetFailoverSelfTest.java |    7 +-
 ...idCachePartitionedSetWithClientSelfTest.java |   52 +
 ...chePartitionedSetWithNodeFilterSelfTest.java |   37 +
 ...IgnitePartitionedCountDownLatchSelfTest.java |    5 -
 .../IgnitePartitionedQueueNoBackupsTest.java    |    5 +
 .../IgnitePartitionedSetNoBackupsSelfTest.java  |    5 +
 ...eplicatedDataStructuresFailoverSelfTest.java |   28 -
 ...ridCacheReplicatedSetWithClientSelfTest.java |   52 +
 ...acheReplicatedSetWithNodeFilterSelfTest.java |   37 +
 .../distributed/Cache64kPartitionsTest.java     |    6 +
 .../CacheAbstractRestartSelfTest.java           |    5 +
 .../distributed/CacheAffinityEarlyTest.java     |    9 +-
 ...acheAsyncOperationsFailoverAbstractTest.java |    9 +-
 .../distributed/CacheAsyncOperationsTest.java   |   17 +-
 .../CacheAtomicPrimarySyncBackPressureTest.java |    6 +
 .../distributed/CacheBaselineTopologyTest.java  |   15 +
 .../distributed/CacheBlockOnGetAllTest.java     |   36 +
 .../CacheBlockOnReadAbstractTest.java           |   40 +
 .../cache/distributed/CacheBlockOnScanTest.java |   16 +
 .../distributed/CacheBlockOnSingleGetTest.java  |   36 +
 .../CacheClientsConcurrentStartTest.java        |    7 +-
 .../CacheDataLossOnPartitionMoveTest.java       |   11 +-
 .../CacheDiscoveryDataConcurrentJoinTest.java   |    9 +-
 .../distributed/CacheExchangeMergeTest.java     |   53 +-
 .../CacheGetFutureHangsSelfTest.java            |    5 +
 .../CacheGetInsideLockChangingTopologyTest.java |   10 +
 .../distributed/CacheGroupsPreloadTest.java     |   60 +
 ...ffinityAssignmentNodeJoinValidationTest.java |    6 +
 .../CacheLateAffinityAssignmentTest.java        |   67 +-
 ...CacheLoadingConcurrentGridStartSelfTest.java |   78 +-
 .../CacheLockReleaseNodeLeaveTest.java          |  124 +-
 .../CacheOperationsInterruptTest.java           |  175 +
 .../CachePageWriteLockUnlockTest.java           |   11 +-
 .../distributed/CacheParallelStartTest.java     |  208 ++
 .../distributed/CachePartitionStateTest.java    |   12 +
 .../CachePutAllFailoverAbstractTest.java        |    6 +
 .../CacheRentingStateRepairTest.java            |    5 +
 ...CacheResultIsNotNullOnPartitionLossTest.java |   30 +-
 .../cache/distributed/CacheStartOnJoinTest.java |   22 +-
 .../CacheTryLockMultithreadedTest.java          |   11 +
 .../CacheTxNearUpdateTopologyChangeTest.java    |    8 +
 ...tractDistributedByteArrayValuesSelfTest.java |   77 +-
 .../GridCacheAbstractJobExecutionTest.java      |    8 +-
 .../GridCacheAbstractNodeRestartSelfTest.java   |   24 +-
 ...tractPartitionedByteArrayValuesSelfTest.java |   19 +-
 .../GridCacheAbstractPrimarySyncSelfTest.java   |   14 +-
 .../GridCacheBasicOpAbstractTest.java           |   18 +-
 .../GridCacheClientModesAbstractSelfTest.java   |   19 +-
 .../GridCacheEntrySetAbstractSelfTest.java      |    7 +-
 ...acheEntrySetIterationPreloadingSelfTest.java |    7 +-
 .../distributed/GridCacheEventAbstractTest.java |   20 +
 .../distributed/GridCacheLockAbstractTest.java  |   21 +-
 .../distributed/GridCacheMixedModeSelfTest.java |    9 +-
 .../GridCacheModuloAffinityFunction.java        |    1 -
 .../GridCacheMultiNodeAbstractTest.java         |   23 +-
 .../GridCacheMultiNodeLockAbstractTest.java     |   23 +-
 ...dCacheMultithreadedFailoverAbstractTest.java |    9 +-
 .../GridCacheNodeFailureAbstractTest.java       |   24 +-
 ...titionEvictionDuringReadThroughSelfTest.java |    7 +-
 ...ridCachePartitionNotLoadedEventSelfTest.java |   36 +-
 ...NearDisabledMvccTxMultiThreadedSelfTest.java |   31 +
 ...chePartitionedReloadAllAbstractSelfTest.java |    7 +-
 .../GridCachePreloadEventsAbstractSelfTest.java |   13 +-
 .../GridCachePreloadLifecycleAbstractTest.java  |    1 -
 ...GridCachePreloadRestartAbstractSelfTest.java |   16 +-
 .../GridCacheTransformEventSelfTest.java        |   99 +-
 ...yMetadataUpdateChangingTopologySelfTest.java |    6 +
 ...niteBinaryMetadataUpdateNodeRestartTest.java |    7 +-
 .../distributed/IgniteCache150ClientsTest.java  |   17 +-
 .../IgniteCacheAtomicNodeRestartTest.java       |   10 +-
 ...heClientMultiNodeUpdateTopologyLockTest.java |    5 +
 ...niteCacheClientNodeChangingTopologyTest.java |   40 +-
 .../IgniteCacheClientNodeConcurrentStart.java   |    7 +-
 ...teCacheClientNodePartitionsExchangeTest.java |   14 +-
 .../IgniteCacheClientReconnectTest.java         |    9 +-
 .../IgniteCacheConnectionRecoveryTest.java      |   20 +-
 .../IgniteCacheCreatePutMultiNodeSelfTest.java  |   24 +-
 .../distributed/IgniteCacheCreatePutTest.java   |   19 +-
 .../IgniteCacheFailedUpdateResponseTest.java    |   48 +-
 .../distributed/IgniteCacheGetRestartTest.java  |   37 +-
 ...eCacheGroupsPartitionLossPolicySelfTest.java |    9 +
 .../distributed/IgniteCacheManyClientsTest.java |    9 +-
 .../IgniteCacheMessageRecoveryAbstractTest.java |    7 +-
 ...eCacheMessageRecoveryIdleConnectionTest.java |   15 +
 .../IgniteCacheMessageWriteTimeoutTest.java     |    5 +
 .../IgniteCacheNearRestartRollbackSelfTest.java |    6 +-
 .../IgniteCacheNodeJoinAbstractTest.java        |    8 +-
 .../IgniteCachePartitionLossPolicySelfTest.java |  583 ++-
 .../distributed/IgniteCachePrimarySyncTest.java |   58 +-
 .../IgniteCachePutGetRestartAbstractTest.java   |    7 +-
 .../IgniteCacheReadFromBackupTest.java          |  101 +-
 .../IgniteCacheServerNodeConcurrentStart.java   |    7 +-
 .../IgniteCacheSingleGetMessageTest.java        |   39 +-
 .../IgniteCacheSizeFailoverTest.java            |    7 +-
 .../IgniteCacheSystemTransactionsSelfTest.java  |   53 +-
 .../IgniteCacheThreadLocalTxTest.java           |   10 +
 .../IgniteCacheTxIteratorSelfTest.java          |   35 +-
 .../IgniteCrossCacheTxStoreSelfTest.java        |   20 +-
 .../IgniteMvccTxTimeoutAbstractTest.java        |  151 +
 ...ptimisticTxSuspendResumeMultiServerTest.java |   30 -
 .../IgniteOptimisticTxSuspendResumeTest.java    |  244 +-
 .../IgnitePessimisticTxSuspendResumeTest.java   |   10 +
 .../IgniteRejectConnectOnNodeStopTest.java      |    5 +
 .../IgniteTxCachePrimarySyncTest.java           |  108 +-
 ...teSynchronizationModesMultithreadedTest.java |   91 +-
 .../IgniteTxConcurrentRemoveObjectsTest.java    |  194 +
 ...iteTxConsistencyRestartAbstractSelfTest.java |    7 +-
 .../distributed/IgniteTxGetAfterStopTest.java   |    9 +-
 ...xOriginatingNodeFailureAbstractSelfTest.java |    6 +
 ...cOriginatingNodeFailureAbstractSelfTest.java |    8 +
 .../IgniteTxPreloadAbstractTest.java            |   19 +-
 .../IgniteTxRemoveTimeoutObjectsTest.java       |   19 +
 .../IgniteTxTimeoutAbstractTest.java            |   49 +-
 .../dht/CacheGetReadFromBackupFailoverTest.java |  262 ++
 ...achePartitionPartialCountersMapSelfTest.java |    7 +-
 ...tPartitionedOnlyByteArrayValuesSelfTest.java |   27 +-
 ...heAbstractTransformWriteThroughSelfTest.java |   23 +-
 .../dht/GridCacheAtomicFullApiSelfTest.java     |    8 +-
 .../dht/GridCacheAtomicNearCacheSelfTest.java   |   10 +-
 .../dht/GridCacheColocatedDebugTest.java        |   36 +-
 ...heColocatedMvccTxSingleThreadedSelfTest.java |   85 +
 ...eColocatedOptimisticTransactionSelfTest.java |    7 +-
 ...dCacheColocatedTxSingleThreadedSelfTest.java |    1 -
 .../dht/GridCacheDhtEntrySelfTest.java          |   16 +-
 ...GridCacheDhtEvictionNearReadersSelfTest.java |   11 +-
 .../GridCacheDhtEvictionsDisabledSelfTest.java  |    9 +-
 .../dht/GridCacheDhtMappingSelfTest.java        |   13 +-
 .../dht/GridCacheDhtMultiBackupTest.java        |    5 +
 .../dht/GridCacheDhtPreloadBigDataSelfTest.java |    8 +-
 .../dht/GridCacheDhtPreloadDelayedSelfTest.java |   12 +-
 .../GridCacheDhtPreloadDisabledSelfTest.java    |   13 +-
 .../GridCacheDhtPreloadMessageCountTest.java    |    7 +-
 ...ridCacheDhtPreloadMultiThreadedSelfTest.java |   12 +-
 .../dht/GridCacheDhtPreloadPerformanceTest.java |    5 +
 .../dht/GridCacheDhtPreloadPutGetSelfTest.java  |   22 +-
 .../dht/GridCacheDhtPreloadSelfTest.java        |   23 +-
 .../GridCacheDhtPreloadStartStopSelfTest.java   |    7 +-
 .../dht/GridCacheDhtPreloadUnloadSelfTest.java  |   10 +-
 .../dht/GridCacheGlobalLoadTest.java            |   17 +-
 ...achePartitionedNearDisabledLockSelfTest.java |    7 +-
 ...ePartitionedNearDisabledMetricsSelfTest.java |    7 +-
 ...dCachePartitionedTopologyChangeSelfTest.java |   13 +-
 ...itionedTxOriginatingNodeFailureSelfTest.java |    8 +
 ...ridCachePartitionedUnloadEventsSelfTest.java |    5 +
 .../GridCachePartitionsStateValidationTest.java |    6 +
 ...idCachePartitionsStateValidatorSelfTest.java |    6 +
 .../dht/GridCacheTxNodeFailureSelfTest.java     |   20 +-
 ...gniteAtomicLongChangingTopologySelfTest.java |   11 +
 .../IgniteCacheClearDuringRebalanceTest.java    |   12 +
 .../IgniteCacheCommitDelayTxRecoveryTest.java   |    8 +
 .../dht/IgniteCacheConcurrentPutGetRemove.java  |    6 +
 .../IgniteCacheCrossCacheTxFailoverTest.java    |   12 +
 .../dht/IgniteCacheLockFailoverSelfTest.java    |   18 +-
 .../dht/IgniteCacheMultiTxLockSelfTest.java     |   36 +-
 ...artitionedBackupNodeFailureRecoveryTest.java |    7 +-
 ...ePrimaryNodeFailureRecoveryAbstractTest.java |   20 +
 .../IgniteCachePutRetryAbstractSelfTest.java    |   16 +-
 .../dht/IgniteCachePutRetryAtomicSelfTest.java  |    6 +-
 ...gniteCachePutRetryTransactionalSelfTest.java |   11 +-
 .../dht/IgniteCacheStartWithLoadTest.java       |   17 +-
 .../dht/IgniteCacheTxRecoveryRollbackTest.java  |   16 +
 .../dht/IgniteCrossCacheMvccTxSelfTest.java     |   44 +
 .../dht/IgniteCrossCacheTxAbstractSelfTest.java |  181 +
 .../dht/IgniteCrossCacheTxSelfTest.java         |  164 +-
 .../dht/NotMappedPartitionInTxTest.java         |  157 +-
 .../dht/TxRecoveryStoreEnabledTest.java         |    6 +
 .../AtomicPutAllChangingTopologyTest.java       |    7 +-
 ...eAtomicInvalidPartitionHandlingSelfTest.java |    7 +
 .../atomic/GridCacheAtomicPreloadSelfTest.java  |   10 +-
 .../atomic/IgniteCacheAtomicProtocolTest.java   |   40 +-
 ...tNearPartitionedByteArrayValuesSelfTest.java |   14 +
 ...tomicClientOnlyMultiNodeFullApiSelfTest.java |   14 +-
 ...eAtomicNearOnlyMultiNodeFullApiSelfTest.java |    7 +-
 ...AtomicPartitionedTckMetricsSelfTestImpl.java |   12 +-
 .../near/GridCacheGetStoreErrorSelfTest.java    |   21 +-
 .../near/GridCacheMvccNearEvictionSelfTest.java |   39 +
 .../GridCacheNearAtomicMetricsSelfTest.java     |    5 +
 .../near/GridCacheNearClientHitTest.java        |   10 +-
 .../near/GridCacheNearEvictionSelfTest.java     |    7 +
 .../near/GridCacheNearMetricsSelfTest.java      |   20 +
 .../near/GridCacheNearMultiGetSelfTest.java     |  100 +-
 .../near/GridCacheNearMultiNodeSelfTest.java    |   44 +-
 .../near/GridCacheNearOneNodeSelfTest.java      |   28 +-
 ...idCacheNearOnlyMultiNodeFullApiSelfTest.java |   12 +-
 .../near/GridCacheNearOnlySelfTest.java         |    7 +-
 .../near/GridCacheNearOnlyTopologySelfTest.java |   18 +
 .../GridCacheNearPartitionedClearSelfTest.java  |   10 +-
 .../GridCacheNearReaderPreloadSelfTest.java     |   13 +-
 .../near/GridCacheNearReadersSelfTest.java      |   20 +-
 .../near/GridCacheNearTxExceptionSelfTest.java  |    8 +
 .../near/GridCacheNearTxForceKeyTest.java       |    5 +
 .../near/GridCacheNearTxMultiNodeSelfTest.java  |    7 +-
 .../near/GridCacheNearTxPreloadSelfTest.java    |   12 +-
 ...AffinityExcludeNeighborsPerformanceTest.java |    9 +-
 .../GridCachePartitionedAffinitySelfTest.java   |   10 +-
 .../GridCachePartitionedBasicOpSelfTest.java    |   10 +-
 ...ePartitionedBasicStoreMultiNodeSelfTest.java |   20 +-
 ...ionedClientOnlyNoPrimaryFullApiSelfTest.java |    8 +-
 .../near/GridCachePartitionedEventSelfTest.java |   12 +-
 .../GridCachePartitionedEvictionSelfTest.java   |   12 +-
 ...titionedExplicitLockNodeFailureSelfTest.java |   11 +
 ...GridCachePartitionedFilteredPutSelfTest.java |    8 +-
 .../GridCachePartitionedFullApiSelfTest.java    |    7 +-
 ...idCachePartitionedHitsAndMissesSelfTest.java |   10 +-
 .../GridCachePartitionedLoadCacheSelfTest.java  |   14 +-
 .../GridCachePartitionedMetricsSelfTest.java    |    8 +
 ...achePartitionedMultiNodeCounterSelfTest.java |   12 +-
 ...achePartitionedMultiNodeFullApiSelfTest.java |   12 +-
 ...idCachePartitionedMultiNodeLockSelfTest.java |   11 +-
 ...ePartitionedMultiThreadedPutGetSelfTest.java |   14 +-
 ...ePartitionedMvccTxMultiThreadedSelfTest.java |  100 +
 ...PartitionedMvccTxSingleThreadedSelfTest.java |   84 +
 ...idCachePartitionedMvccTxTimeoutSelfTest.java |   47 +
 .../GridCachePartitionedNodeRestartTest.java    |   21 +-
 ...ePartitionedOptimisticTxNodeRestartTest.java |   21 +-
 ...achePartitionedPreloadLifecycleSelfTest.java |   10 +-
 .../GridCachePartitionedStorePutSelfTest.java   |   65 +-
 ...GridCachePartitionedTxMultiNodeSelfTest.java |   13 +-
 ...CachePartitionedTxMultiThreadedSelfTest.java |    1 -
 .../GridCachePartitionedTxSalvageSelfTest.java  |   10 +-
 ...achePartitionedTxSingleThreadedSelfTest.java |    1 -
 .../GridCachePartitionedTxTimeoutSelfTest.java  |   21 -
 .../near/GridCachePutArrayValueSelfTest.java    |   16 +-
 ...idCacheRendezvousAffinityClientSelfTest.java |    7 +-
 .../near/GridNearCacheStoreUpdateTest.java      |   13 +
 .../near/GridPartitionedBackupLoadSelfTest.java |    7 +-
 .../near/IgniteCacheNearOnlyTxTest.java         |   20 +-
 .../near/IgniteCacheNearReadCommittedTest.java  |   17 +-
 .../near/IgniteCacheNearTxRollbackTest.java     |    7 +-
 .../near/NearCacheMultithreadedUpdateTest.java  |    8 +
 .../near/NearCachePutAllMultinodeTest.java      |    7 +-
 .../near/NearCacheSyncUpdateTest.java           |   24 +
 .../near/NoneRebalanceModeSelfTest.java         |   17 +-
 .../rebalancing/CacheManualRebalancingTest.java |   14 +-
 ...cingDelayedPartitionMapExchangeSelfTest.java |    5 +
 .../GridCacheRebalancingAsyncSelfTest.java      |    7 +-
 .../GridCacheRebalancingCancelTest.java         |    7 +
 .../GridCacheRebalancingOrderingTest.java       |    5 +
 ...cheRebalancingPartitionCountersMvccTest.java |   29 +
 ...idCacheRebalancingPartitionCountersTest.java |   14 +
 ...cheRebalancingPartitionDistributionTest.java |    6 +-
 .../GridCacheRebalancingSyncCheckDataTest.java  |    7 +
 .../GridCacheRebalancingSyncSelfTest.java       |  101 +-
 ...eRebalancingUnmarshallingFailedSelfTest.java |    7 +
 ...cheRebalancingWithAsyncClearingMvccTest.java |   36 +
 ...idCacheRebalancingWithAsyncClearingTest.java |   64 +-
 ...balanceOnCachesStoppingOrDestroyingTest.java |  298 ++
 ...stractReplicatedByteArrayValuesSelfTest.java |    2 +-
 .../GridCacheReplicatedLockSelfTest.java        |    7 +-
 .../GridCacheReplicatedMetricsSelfTest.java     |    8 +
 ...heReplicatedMvccTxMultiThreadedSelfTest.java |   81 +
 ...eReplicatedMvccTxSingleThreadedSelfTest.java |   77 +
 ...ridCacheReplicatedMvccTxTimeoutSelfTest.java |   44 +
 .../GridCacheReplicatedNodeRestartSelfTest.java |   20 +
 ...GridCacheReplicatedTxMultiNodeBasicTest.java |   11 +
 ...dCacheReplicatedTxMultiThreadedSelfTest.java |   26 -
 ...CacheReplicatedTxSingleThreadedSelfTest.java |   44 +-
 .../GridCacheReplicatedTxTimeoutSelfTest.java   |   18 -
 .../GridCacheSyncReplicatedPreloadSelfTest.java |    8 +-
 .../replicated/GridReplicatedTxPreloadTest.java |    5 +
 .../IgniteCacheSyncRebalanceModeSelfTest.java   |    6 +
 ...CacheReplicatedPreloadLifecycleSelfTest.java |    9 +-
 .../GridCacheReplicatedPreloadSelfTest.java     |  155 +-
 ...eplicatedPreloadStartStopEventsSelfTest.java |    7 +-
 .../cache/eviction/DhtAndNearEvictionTest.java  |   19 +
 .../cache/eviction/EvictionAbstractTest.java    |   31 +-
 .../EvictionPolicyFactoryAbstractTest.java      |   33 +-
 ...heConcurrentEvictionConsistencySelfTest.java |   50 +-
 .../GridCacheConcurrentEvictionsSelfTest.java   |   49 +-
 .../GridCacheEmptyEntriesAbstractSelfTest.java  |   11 +-
 .../GridCacheEmptyEntriesLocalSelfTest.java     |   15 +-
 ...ridCacheEmptyEntriesPartitionedSelfTest.java |   13 +-
 .../GridCacheEvictableEntryEqualsSelfTest.java  |    5 +
 .../GridCacheEvictionFilterSelfTest.java        |   16 +-
 .../GridCacheEvictionLockUnlockSelfTest.java    |   19 +-
 .../GridCacheEvictionTouchSelfTest.java         |   18 +-
 .../lru/LruEvictionPolicyFactorySelfTest.java   |    7 +-
 .../eviction/lru/LruEvictionPolicySelfTest.java |    7 +-
 .../lru/LruNearEvictionPolicySelfTest.java      |   21 +-
 .../LruNearOnlyNearEvictionPolicySelfTest.java  |   39 +-
 .../paged/PageEvictionDataStreamerTest.java     |    8 +-
 .../eviction/paged/PageEvictionMetricTest.java  |   24 +-
 .../PageEvictionMultinodeAbstractTest.java      |   40 +-
 .../PageEvictionMultinodeMixedRegionsTest.java  |    2 +-
 ...ageEvictionPagesRecyclingAndReusingTest.java |   40 +
 .../paged/PageEvictionReadThroughTest.java      |   42 +
 .../paged/PageEvictionTouchOrderTest.java       |   41 +
 .../PageEvictionWithRebalanceAbstractTest.java  |   24 +-
 .../SortedEvictionPolicyPerformanceTest.java    |    7 +-
 .../IgniteCacheClientNearCacheExpiryTest.java   |    7 +-
 .../IgniteCacheExpiryPolicyAbstractTest.java    |   17 +
 .../IgniteCacheExpiryPolicyTestSuite.java       |   42 +-
 ...eCacheExpiryPolicyWithStoreAbstractTest.java |   10 +-
 .../expiry/IgniteCacheLargeValueExpireTest.java |    5 +
 ...eCacheOnlyOneTtlCleanupThreadExistsTest.java |    5 +
 .../IgniteCacheTxExpiryPolicyWithStoreTest.java |    7 +-
 .../IgniteCacheLoadAllAbstractTest.java         |   19 +-
 .../IgniteCacheLoaderWriterAbstractTest.java    |   10 +-
 ...iteCacheNoLoadPreviousValueAbstractTest.java |    7 +-
 .../IgniteCacheNoReadThroughAbstractTest.java   |    7 +-
 .../IgniteCacheNoWriteThroughAbstractTest.java  |    7 +-
 ...IgniteCacheStoreNodeRestartAbstractTest.java |    7 +-
 .../IgniteCacheStoreSessionAbstractTest.java    |    7 +-
 ...acheStoreSessionWriteBehindAbstractTest.java |   10 +-
 .../IgniteCacheTxLoaderWriterTest.java          |   12 +-
 .../IgniteCacheTxLocalLoadAllTest.java          |   11 +-
 ...niteCacheTxLocalNoLoadPreviousValueTest.java |   12 +-
 .../IgniteCacheTxLocalNoReadThroughTest.java    |   12 +-
 .../IgniteCacheTxLocalNoWriteThroughTest.java   |   12 +-
 ...cheTxNearEnabledNoLoadPreviousValueTest.java |   12 +-
 ...iteCacheTxNearEnabledNoWriteThroughTest.java |   12 +-
 .../IgniteCacheTxNoLoadPreviousValueTest.java   |   12 +-
 .../IgniteCacheTxNoReadThroughTest.java         |   12 +-
 .../IgniteCacheTxNoWriteThroughTest.java        |   12 +-
 .../IgniteCacheTxStoreSessionTest.java          |   18 +-
 ...TxStoreSessionWriteBehindCoalescingTest.java |   12 +-
 ...gniteCacheTxStoreSessionWriteBehindTest.java |   12 +-
 ...dCacheAtomicLocalTckMetricsSelfTestImpl.java |   10 +-
 .../local/GridCacheDaemonNodeLocalSelfTest.java |   10 +-
 .../local/GridCacheLocalBasicApiSelfTest.java   |   12 +-
 .../local/GridCacheLocalBasicStoreSelfTest.java |   12 +-
 .../GridCacheLocalByteArrayValuesSelfTest.java  |   24 +-
 .../local/GridCacheLocalEventSelfTest.java      |   11 +-
 .../GridCacheLocalEvictionEventSelfTest.java    |   12 +-
 .../local/GridCacheLocalFullApiSelfTest.java    |    7 +
 ...dCacheLocalGetAndTransformStoreSelfTest.java |   12 +-
 .../GridCacheLocalIsolatedNodesSelfTest.java    |   10 +-
 .../local/GridCacheLocalIteratorsSelfTest.java  |    8 +
 .../local/GridCacheLocalLoadAllSelfTest.java    |   17 +-
 .../cache/local/GridCacheLocalLockSelfTest.java |   22 +-
 .../local/GridCacheLocalMetricsSelfTest.java    |   10 +
 .../GridCacheLocalMultithreadedSelfTest.java    |   21 +-
 .../GridCacheLocalTxExceptionSelfTest.java      |    8 +
 .../GridCacheLocalTxMultiThreadedSelfTest.java  |    9 +-
 .../GridCacheLocalTxSingleThreadedSelfTest.java |    9 +-
 .../local/GridCacheLocalTxTimeoutSelfTest.java  |   20 +
 ...tomicNearEnabledMultiJvmFullApiSelfTest.java |    7 +-
 ...plicatedNearOnlyMultiJvmFullApiSelfTest.java |   11 +-
 ...vccAbstractBasicCoordinatorFailoverTest.java |  191 +
 ...acheMvccAbstractCoordinatorFailoverTest.java |   16 +
 .../cache/mvcc/CacheMvccAbstractTest.java       |   26 +-
 .../cache/mvcc/CacheMvccClusterRestartTest.java |    9 +-
 .../CacheMvccConfigurationValidationTest.java   |   47 +-
 ...ccIteratorWithConcurrentTransactionTest.java |    5 +
 ...calEntriesWithConcurrentTransactionTest.java |    5 +
 .../mvcc/CacheMvccOperationChecksTest.java      |   19 +-
 ...eMvccPartitionedCoordinatorFailoverTest.java |   53 +
 .../mvcc/CacheMvccProcessorLazyStartTest.java   |    8 +
 .../cache/mvcc/CacheMvccProcessorTest.java      |   26 +-
 .../CacheMvccRemoteTxOnNearNodeStartTest.java   |    5 +
 ...cScanQueryWithConcurrentTransactionTest.java |    5 +
 ...heMvccSizeWithConcurrentTransactionTest.java |    5 +
 .../cache/mvcc/CacheMvccTransactionsTest.java   |  129 +-
 .../cache/mvcc/CacheMvccTxFailoverTest.java     |  283 ++
 .../cache/mvcc/CacheMvccVacuumTest.java         |   14 +
 .../cache/mvcc/MvccCachePeekTest.java           |  166 +
 .../cache/mvcc/MvccUnsupportedTxModesTest.java  |  366 ++
 .../cache/persistence/DummyPageIO.java          |   21 +-
 ...eBaselineAffinityTopologyActivationTest.java |   84 +-
 .../IgniteDataStorageMetricsSelfTest.java       |   22 +-
 ...tePdsBinaryMetadataOnClusterRestartTest.java |   18 +-
 .../IgnitePdsBinarySortObjectFieldsTest.java    |    5 +
 ...gnitePdsCacheAssignmentNodeRestartsTest.java |   11 +-
 ...heConfigurationFileConsistencyCheckTest.java |    7 +
 ...cheObjectBinaryProcessorOnDiscoveryTest.java |    5 +
 .../IgnitePdsCacheRebalancingAbstractTest.java  |   10 +
 ...PdsCacheStartStopWithFreqCheckpointTest.java |  184 +
 .../IgnitePdsContinuousRestartTest.java         |   47 +-
 ...dsContinuousRestartTestWithExpiryPolicy.java |    8 +
 .../IgnitePdsCorruptedIndexTest.java            |   15 +-
 .../IgnitePdsCorruptedStoreTest.java            |   24 +-
 .../persistence/IgnitePdsDestroyCacheTest.java  |   10 +-
 ...tePdsDestroyCacheWithoutCheckpointsTest.java |    6 +
 .../persistence/IgnitePdsDynamicCacheTest.java  |    9 +-
 .../IgnitePdsExchangeDuringCheckpointTest.java  |    7 +
 ...MarshallerMappingRestoreOnNodeStartTest.java |    5 +
 .../persistence/IgnitePdsPageSizesTest.java     |   17 +
 .../IgnitePdsPartitionFilesDestroyTest.java     |   38 +-
 .../IgnitePdsPartitionsStateRecoveryTest.java   |  177 +
 ...gnitePdsRecoveryAfterFileCorruptionTest.java |    8 +
 .../IgnitePdsRemoveDuringRebalancingTest.java   |    5 +
 .../persistence/IgnitePdsTaskCancelingTest.java |   18 +-
 .../IgnitePdsTxCacheRebalancingTest.java        |    5 +
 .../IgnitePersistentStoreCacheGroupsTest.java   |   13 +
 ...IgnitePersistentStoreDataStructuresTest.java |   30 +-
 ...teRebalanceScheduleResendPartitionsTest.java |   14 +-
 ...hangeDuringRebalanceOnNonNodeAssignTest.java |  170 -
 ...lWalModeChangeDuringRebalancingSelfTest.java |  162 +-
 ...hangeDuringRebalanceOnNonNodeAssignTest.java |  211 ++
 .../MemoryPolicyInitializationTest.java         |   10 +
 .../PersistenceDirectoryWarningLoggingTest.java |    6 +
 ...lientAffinityAssignmentWithBaselineTest.java |   43 +-
 ...niteAbsentEvictionNodeOutOfBaselineTest.java |    5 +
 .../db/CheckpointBufferDeadlockTest.java        |   15 +-
 .../db/IgniteLogicalRecoveryTest.java           |  707 ++++
 .../db/IgnitePdsCacheRestoreTest.java           |   14 +-
 ...itePdsCacheWalDisabledOnRebalancingTest.java |  272 ++
 .../db/IgnitePdsDataRegionMetricsTest.java      |   89 +-
 .../db/IgnitePdsMultiNodePutGetRestartTest.java |    5 +
 ...PdsPageEvictionDuringPartitionClearTest.java |    9 +
 .../db/IgnitePdsPageEvictionTest.java           |    5 +
 .../db/IgnitePdsPartitionPreloadTest.java       |  209 ++
 ...tePdsRebalancingOnNotStableTopologyTest.java |   18 +-
 .../db/IgnitePdsReserveWalSegmentsTest.java     |    8 +-
 .../db/IgnitePdsTransactionsHangTest.java       |   19 +-
 .../db/IgnitePdsWholeClusterRestartTest.java    |   19 +-
 .../persistence/db/IgnitePdsWithTtlTest.java    |   13 +-
 ...SlowHistoricalRebalanceSmallHistoryTest.java |   14 +-
 ...gniteCheckpointDirtyPagesForLowLoadTest.java |    8 +-
 .../checkpoint/IgniteMassLoadSandboxTest.java   |    8 +
 ...faultPageSizeBackwardsCompatibilityTest.java |   24 +-
 ...nitePdsCacheDestroyDuringCheckpointTest.java |    5 +
 .../db/file/IgnitePdsCacheIntegrationTest.java  |    6 +
 .../db/file/IgnitePdsCheckpointSimpleTest.java  |    7 +-
 ...ckpointSimulationWithRealCpDisabledTest.java |   96 +-
 .../file/IgnitePdsDiskErrorsRecoveringTest.java |  132 +-
 .../file/IgnitePdsNoActualWalHistoryTest.java   |    5 +
 .../db/file/IgnitePdsPageReplacementTest.java   |    5 +
 .../file/IgnitePdsThreadInterruptionTest.java   |    8 +-
 .../IgniteUidAsConsistentIdMigrationTest.java   |   18 +
 .../wal/FsyncWalRolloverDoesNotBlockTest.java   |    7 +-
 .../IgniteNodeStoppedDuringDisableWALTest.java  |   26 +-
 ...IsReachedDuringIterationOverArchiveTest.java |    6 +
 .../db/wal/IgniteWalFlushFailoverTest.java      |   15 +-
 ...lFlushMultiNodeFailoverAbstractSelfTest.java |   30 +-
 .../db/wal/IgniteWalFormatFileFailoverTest.java |  518 +--
 .../wal/IgniteWalHistoryReservationsTest.java   |   39 +-
 ...gniteWalIteratorExceptionDuringReadTest.java |    5 +
 .../wal/IgniteWalIteratorSwitchSegmentTest.java |   76 +-
 .../db/wal/IgniteWalRebalanceTest.java          |   19 +-
 .../db/wal/IgniteWalRecoveryPPCTest.java        |    6 +
 .../IgniteWalRecoverySeveralRestartsTest.java   |    7 +
 .../db/wal/IgniteWalSerializerVersionTest.java  |    6 +
 .../db/wal/WalCompactionAfterRestartTest.java   |  166 +
 .../persistence/db/wal/WalCompactionTest.java   |   69 +-
 .../db/wal/WalDeletionArchiveAbstractTest.java  |   30 +-
 .../cache/persistence/db/wal/WalPathsTest.java  |    6 +
 .../db/wal/WalRecoveryTxLogicalRecordsTest.java |   19 +-
 .../db/wal/WalRolloverRecordLoggingTest.java    |    6 +
 .../db/wal/WalRolloverTypesTest.java            |   20 +
 ...IgniteAbstractWalIteratorInvalidCrcTest.java |    7 +
 .../db/wal/crc/IgniteDataIntegrityTests.java    |   16 +-
 .../wal/crc/IgnitePureJavaCrcCompatibility.java |    5 +
 .../IgniteReplayWalIteratorInvalidCrcTest.java  |    5 +
 .../db/wal/reader/IgniteWalReaderTest.java      |  186 +-
 .../persistence/file/FileDownloaderTest.java    |    7 +-
 .../metastorage/IgniteMetaStorageBasicTest.java |  356 ++
 .../pagemem/FillFactorMetricTest.java           |    6 +
 ...gnitePageMemReplaceDelayedWriteUnitTest.java |   18 +-
 .../persistence/pagemem/NoOpWALManager.java     |    7 +
 .../pagemem/PageIdDistributionTest.java         |    6 +
 .../pagemem/PageMemoryImplNoLoadTest.java       |    5 +
 .../persistence/pagemem/PageMemoryImplTest.java |    9 +
 .../pagemem/PageMemoryNoStoreLeakTest.java      |    5 +
 .../pagemem/PagesWriteThrottleSandboxTest.java  |    5 +
 .../pagemem/PagesWriteThrottleSmokeTest.java    |   14 +-
 .../AbstractNodeJoinTemplate.java               |    4 +-
 .../IgniteChangeGlobalStateCacheTest.java       |    7 +
 ...IgniteChangeGlobalStateDataStreamerTest.java |    5 +
 ...gniteChangeGlobalStateDataStructureTest.java |    7 +
 .../IgniteChangeGlobalStateFailOverTest.java    |    7 +
 .../IgniteChangeGlobalStateServiceTest.java     |    5 +
 .../IgniteChangeGlobalStateTest.java            |   20 +-
 .../IgniteNoParrallelClusterIsAllowedTest.java  |    5 +
 .../IgniteStandByClusterTest.java               |   12 +
 .../join/JoinActiveNodeToActiveCluster.java     |   14 +
 .../join/JoinActiveNodeToInActiveCluster.java   |   14 +
 .../join/JoinInActiveNodeToActiveCluster.java   |   14 +
 .../join/JoinInActiveNodeToInActiveCluster.java |   14 +
 ...ctiveNodeToActiveClusterWithPersistence.java |    8 +
 .../IgniteStandByClientReconnectTest.java       |    8 +
 ...eStandByClientReconnectToNewClusterTest.java |    8 +
 .../persistence/tree/io/TrackingPageIOTest.java |   13 +-
 .../wal/AbstractWalDeltaConsistencyTest.java    |   19 +
 .../wal/CpTriggeredWalDeltaConsistencyTest.java |   24 +-
 .../wal/ExplicitWalDeltaConsistencyTest.java    |   35 +-
 .../wal/SegmentedRingByteBufferTest.java        |   16 +-
 .../wal/SysPropWalDeltaConsistencyTest.java     |   24 +-
 .../persistence/wal/aware/SegmentAwareTest.java |   44 +-
 .../wal/memtracker/PageMemoryTracker.java       |   58 +-
 .../PageMemoryTrackerPluginProvider.java        |   21 +-
 .../StandaloneWalRecordsIteratorTest.java       |  129 +-
 .../cache/query/CacheScanQueryFailoverTest.java |    6 +
 .../GridCacheQueryTransformerSelfTest.java      |   18 +
 .../cache/query/GridCircularQueueTest.java      |    7 +-
 .../IgniteCacheQueryCacheDestroySelfTest.java   |    5 +
 .../cache/query/IndexingSpiQuerySelfTest.java   |   43 +-
 .../cache/query/IndexingSpiQueryTxSelfTest.java |    8 +-
 .../ScanQueryOffheapExpiryPolicySelfTest.java   |    5 +
 .../continuous/CacheContinuousBatchAckTest.java |   21 +-
 ...heContinuousBatchForceServerModeAckTest.java |    1 -
 ...tinuousQueryAsyncFailoverMvccTxSelfTest.java |   59 +
 ...eContinuousQueryAsyncFilterListenerTest.java |   48 +-
 ...nuousQueryConcurrentPartitionUpdateTest.java |   16 +
 ...CacheContinuousQueryCounterAbstractTest.java |   22 +-
 .../CacheContinuousQueryEventBufferTest.java    |    7 +-
 ...acheContinuousQueryExecuteInPrimaryTest.java |   14 +-
 ...usQueryFactoryFilterRandomOperationTest.java |    7 +-
 ...ContinuousQueryFailoverAbstractSelfTest.java |  112 +-
 ...usQueryFailoverMvccTxReplicatedSelfTest.java |   31 +
 ...heContinuousQueryFailoverMvccTxSelfTest.java |   54 +
 .../CacheContinuousQueryLostPartitionTest.java  |   10 +
 ...ontinuousQueryOperationFromCallbackTest.java |   15 +
 .../CacheContinuousQueryOperationP2PTest.java   |   16 +
 .../CacheContinuousQueryOrderingEventTest.java  |   25 +-
 ...acheContinuousQueryRandomOperationsTest.java |   52 +-
 .../CacheContinuousQueryVariationsTest.java     |   18 +-
 ...heContinuousWithTransformerFailoverTest.java |    7 +
 ...inuousWithTransformerReplicatedSelfTest.java |   26 +-
 ...eEntryProcessorExternalizableFailedTest.java |  419 ++-
 .../CacheEntryProcessorNonSerializableTest.java |  274 +-
 ...CacheKeepBinaryIterationNearEnabledTest.java |    8 +-
 ...acheKeepBinaryIterationStoreEnabledTest.java |    6 +
 .../CacheKeepBinaryIterationTest.java           |   12 +-
 .../ClientReconnectContinuousQueryTest.java     |    5 +
 .../ContinuousQueryMarshallerTest.java          |    6 +
 .../ContinuousQueryPeerClassLoadingTest.java    |    7 +
 .../ContinuousQueryReassignmentTest.java        |  177 +
 ...yRemoteFilterMissingInClassPathSelfTest.java |    8 +
 ...ridCacheContinuousQueryAbstractSelfTest.java |   22 +-
 .../GridCacheContinuousQueryAtomicSelfTest.java |    7 +-
 .../GridCacheContinuousQueryConcurrentTest.java |   14 +
 ...eContinuousQueryMultiNodesFilteringTest.java |    6 +
 ...dCacheContinuousQueryNodesFilteringTest.java |    7 +-
 ...eContinuousQueryPartitionedOnlySelfTest.java |    7 +-
 ...ContinuousQueryReplicatedAtomicSelfTest.java |    7 +-
 ...dCacheContinuousQueryReplicatedSelfTest.java |    8 +-
 ...eContinuousQueryReplicatedTxOneNodeTest.java |    9 +-
 .../GridCacheContinuousQueryTxSelfTest.java     |    7 +-
 ...niteCacheContinuousQueryBackupQueueTest.java |    7 +
 ...CacheContinuousQueryClientReconnectTest.java |    8 +-
 .../IgniteCacheContinuousQueryClientTest.java   |    9 +-
 ...eCacheContinuousQueryImmutableEntryTest.java |    8 +-
 ...teCacheContinuousQueryNoUnsubscribeTest.java |    6 +
 ...IgniteCacheContinuousQueryReconnectTest.java |    8 +-
 ...idCacheWriteBehindStoreAbstractSelfTest.java |    1 -
 .../GridCacheWriteBehindStoreAbstractTest.java  |   20 +-
 .../GridCacheWriteBehindStoreLocalTest.java     |   12 +-
 ...heWriteBehindStoreMultithreadedSelfTest.java |   45 +-
 ...BehindStorePartitionedMultiNodeSelfTest.java |   15 +-
 .../GridCacheWriteBehindStoreSelfTest.java      |   20 +-
 .../IgniteCacheWriteBehindNoUpdateSelfTest.java |    5 +
 ...CacheClientWriteBehindStoreAbstractTest.java |   20 +-
 ...ClientWriteBehindStoreNonCoalescingTest.java |    5 +
 .../AbstractDeadlockDetectionTest.java          |    2 -
 .../transactions/AtomicOperationsInTxTest.java  |    7 +
 .../transactions/DepthFirstSearchTest.java      |    9 +
 ...IntegrityWithPrimaryIndexCorruptionTest.java |   33 +-
 ...ctionIntegrityWithSystemWorkerDeathTest.java |    5 +
 .../TxDataConsistencyOnCommitFailureTest.java   |    7 +
 .../cache/transactions/TxDeadlockCauseTest.java |   10 +-
 ...DeadlockDetectionMessageMarshallingTest.java |    6 +-
 .../TxDeadlockDetectionNoHangsTest.java         |    6 +
 .../transactions/TxDeadlockDetectionTest.java   |    9 +
 .../TxDeadlockDetectionUnmasrhalErrorsTest.java |    6 +-
 .../cache/transactions/TxLabelTest.java         |   28 +-
 .../transactions/TxMultiCacheAsyncOpsTest.java  |    6 +
 .../cache/transactions/TxOnCachesStartTest.java |    5 +
 ...timisticDeadlockDetectionCrossCacheTest.java |    5 +
 .../TxOptimisticDeadlockDetectionTest.java      |    9 +-
 .../TxOptimisticOnPartitionExchangeTest.java    |    7 +-
 ...OptimisticPrepareOnUnstableTopologyTest.java |  170 +-
 ...simisticDeadlockDetectionCrossCacheTest.java |    9 +-
 .../TxPessimisticDeadlockDetectionTest.java     |    9 +-
 .../TxRollbackAsyncNearCacheTest.java           |   11 +
 .../cache/transactions/TxRollbackAsyncTest.java |  116 +-
 .../TxRollbackOnIncorrectParamsTest.java        |   24 +-
 .../TxRollbackOnTimeoutOnePhaseCommitTest.java  |    7 +
 .../transactions/TxRollbackOnTimeoutTest.java   |   34 +-
 .../TxRollbackOnTopologyChangeTest.java         |    9 +
 .../transactions/TxStateChangeEventTest.java    |   84 +-
 ...WithSmallTimeoutAndContentionOneKeyTest.java |   15 +
 .../CacheVersionedEntryAbstractTest.java        |   10 +-
 ...ersionedEntryLocalTransactionalSelfTest.java |   13 +-
 .../closure/GridClosureProcessorRemoteTest.java |    8 +-
 .../closure/GridClosureProcessorSelfTest.java   |   16 +-
 .../closure/GridClosureSerializationTest.java   |   13 +-
 .../cluster/GridAddressResolverSelfTest.java    |    5 +
 .../cluster/GridUpdateNotifierSelfTest.java     |    5 +
 ...ComputeJobExecutionErrorToLogManualTest.java |    5 +
 ...gniteComputeConfigVariationsFullApiTest.java |   46 +-
 ...puteCustomExecutorConfigurationSelfTest.java |    5 +
 .../IgniteComputeCustomExecutorSelfTest.java    |    6 +
 .../compute/PublicThreadpoolStarvationTest.java |    5 +
 .../continuous/GridEventConsumeSelfTest.java    |   24 +
 .../continuous/GridMessageListenSelfTest.java   |   15 +-
 .../IgniteNoCustomEventsOnNodeStart.java        |    5 +
 .../processors/database/BPlusTreeSelfTest.java  |   94 +
 .../database/CacheFreeListImplSelfTest.java     |   27 +-
 .../database/DataRegionMetricsSelfTest.java     |    8 +
 .../database/IgniteDbAbstractTest.java          |    2 -
 .../database/IgniteDbDynamicCacheSelfTest.java  |    6 +
 .../IgniteDbMemoryLeakAbstractTest.java         |    5 +
 .../database/IgniteDbPutGetAbstractTest.java    |   58 +-
 .../IgniteDbPutGetWithCacheStoreTest.java       |   14 +
 .../IgniteDbSingleNodeTinyPutGetTest.java       |   68 +-
 .../database/IndexStorageSelfTest.java          |   26 +-
 .../database/SwapPathConstructionSelfTest.java  |    6 +
 ...aStreamProcessorMvccPersistenceSelfTest.java |   28 +
 .../DataStreamProcessorMvccSelfTest.java        |    9 +-
 .../DataStreamProcessorPersistenceSelfTest.java |   28 +
 .../DataStreamProcessorSelfTest.java            |  128 +-
 ...rClientReconnectAfterClusterRestartTest.java |    8 +
 .../datastreamer/DataStreamerImplSelfTest.java  |   15 +
 .../DataStreamerMultiThreadedSelfTest.java      |    8 +-
 .../DataStreamerMultinodeCreateCacheTest.java   |    7 +-
 .../datastreamer/DataStreamerTimeoutTest.java   |    6 +
 .../DataStreamerUpdateAfterLoadTest.java        |    5 +
 .../IgniteDataStreamerPerformanceTest.java      |    7 +-
 .../igfs/IgfsAbstractBaseSelfTest.java          |    4 +-
 .../processors/igfs/IgfsAbstractSelfTest.java   |   82 +-
 .../processors/igfs/IgfsAttributesSelfTest.java |    7 +-
 .../igfs/IgfsBackupFailoverSelfTest.java        |   10 +-
 ...lockMessageSystemPoolStarvationSelfTest.java |    5 +
 ...sCachePerBlockLruEvictionPolicySelfTest.java |   14 +-
 .../processors/igfs/IgfsCacheSelfTest.java      |    7 +-
 .../igfs/IgfsDataManagerSelfTest.java           |   12 +-
 .../igfs/IgfsDualAbstractSelfTest.java          |   81 +-
 .../processors/igfs/IgfsFileInfoSelfTest.java   |    6 +-
 .../processors/igfs/IgfsFileMapSelfTest.java    |   12 +-
 ...IgfsGroupDataBlockKeyMapperHashSelfTest.java |    7 +-
 ...SecondaryFileSystemDualAbstractSelfTest.java |   12 +-
 ...fsLocalSecondaryFileSystemProxySelfTest.java |   12 +-
 .../igfs/IgfsMetaManagerSelfTest.java           |    7 +-
 .../processors/igfs/IgfsMetricsSelfTest.java    |    9 +-
 .../igfs/IgfsModeResolverSelfTest.java          |   13 +-
 .../processors/igfs/IgfsModesSelfTest.java      |   16 +-
 .../processors/igfs/IgfsOneClientNodeTest.java  |    7 +-
 .../igfs/IgfsPrimaryMultiNodeSelfTest.java      |    8 +-
 ...maryRelaxedConsistencyMultiNodeSelfTest.java |   11 +-
 .../processors/igfs/IgfsProcessorSelfTest.java  |   47 +-
 .../igfs/IgfsProcessorValidationSelfTest.java   |   22 +-
 ...gfsSecondaryFileSystemInjectionSelfTest.java |    8 +-
 ...IpcEndpointRegistrationAbstractSelfTest.java |    8 +-
 ...dpointRegistrationOnLinuxAndMacSelfTest.java |    7 +-
 ...pcEndpointRegistrationOnWindowsSelfTest.java |    7 +-
 .../processors/igfs/IgfsSizeSelfTest.java       |   14 +-
 .../processors/igfs/IgfsStartCacheTest.java     |    7 +-
 .../processors/igfs/IgfsStreamsSelfTest.java    |    7 +
 .../processors/igfs/IgfsTaskSelfTest.java       |    8 +-
 ...IgfsByteDelimiterRecordResolverSelfTest.java |   14 +-
 .../IgfsFixedLengthRecordResolverSelfTest.java  |    7 +-
 ...sNewLineDelimiterRecordResolverSelfTest.java |    7 +-
 ...fsStringDelimiterRecordResolverSelfTest.java |    7 +-
 .../GridJobMetricsProcessorLoadTest.java        |    7 +-
 ...niteMessagingConfigVariationFullApiTest.java |   18 +
 .../OdbcConfigurationValidationSelfTest.java    |   13 +-
 .../odbc/OdbcEscapeSequenceSelfTest.java        |   40 +-
 .../port/GridPortProcessorSelfTest.java         |    8 +-
 .../cache/GridCacheCommandHandlerSelfTest.java  |    8 +-
 .../handlers/log/GridLogCommandHandlerTest.java |   13 +
 .../query/GridQueryCommandHandlerTest.java      |    9 +
 .../top/CacheTopologyCommandHandlerTest.java    |    7 +
 .../service/ClosureServiceClientsNodesTest.java |   12 +-
 .../service/GridServiceClientNodeTest.java      |    7 +
 .../GridServiceContinuousQueryRedeployTest.java |    5 +
 ...ServiceDeploymentCompoundFutureSelfTest.java |    5 +
 ...rviceDeploymentExceptionPropagationTest.java |    5 +
 .../GridServicePackagePrivateSelfTest.java      |    5 +
 .../GridServiceProcessorAbstractSelfTest.java   |   25 +-
 ...GridServiceProcessorBatchDeploySelfTest.java |   17 +
 ...ServiceProcessorMultiNodeConfigSelfTest.java |   10 +
 .../GridServiceProcessorMultiNodeSelfTest.java  |   12 +-
 .../GridServiceProcessorProxySelfTest.java      |   14 +
 .../GridServiceProcessorSingleNodeSelfTest.java |    7 +-
 .../GridServiceProcessorStopSelfTest.java       |    6 +
 ...GridServiceProxyClientReconnectSelfTest.java |    6 +
 .../GridServiceProxyNodeStopSelfTest.java       |    5 +
 .../GridServiceReassignmentSelfTest.java        |   10 +-
 .../GridServiceSerializationSelfTest.java       |    5 +
 ...gniteServiceConfigVariationsFullApiTest.java |   10 +-
 ...yment2ClassLoadersDefaultMarshallerTest.java |    7 +
 ...oymentClassLoadingDefaultMarshallerTest.java |    7 +
 .../IgniteServiceDynamicCachesSelfTest.java     |    6 +
 ...gniteServiceProxyTimeoutInitializedTest.java |   10 +-
 .../service/IgniteServiceReassignmentTest.java  |    9 +
 .../ServiceDeploymentOnActivationTest.java      |   14 +-
 .../ServiceDeploymentOutsideBaselineTest.java   |   16 +
 .../ServicePredicateAccessCacheTest.java        |    5 +
 .../service/SystemCacheNotConfiguredTest.java   |    5 +
 .../timeout/GridTimeoutProcessorSelfTest.java   |   15 +-
 .../product/GridProductVersionSelfTest.java     |    7 +-
 .../internal/sql/SqlParserBulkLoadSelfTest.java |    6 +
 .../sql/SqlParserCreateIndexSelfTest.java       |    7 +-
 .../sql/SqlParserDropIndexSelfTest.java         |    5 +
 .../sql/SqlParserSetStreamingSelfTest.java      |    5 +
 .../SqlParserTransactionalKeywordsSelfTest.java |    7 +
 .../internal/sql/SqlParserUserSelfTest.java     |    9 +-
 .../IoStatisticsCachePersistenceSelfTest.java   |   30 +
 .../stat/IoStatisticsCacheSelfTest.java         |  262 ++
 .../stat/IoStatisticsManagerSelfTest.java       |  154 +
 ...tatisticsMetricsLocalMXBeanImplSelfTest.java |  224 ++
 .../internal/util/GridArraysSelfTest.java       |    8 +
 .../ignite/internal/util/GridCleanerTest.java   |    5 +
 .../internal/util/GridHandleTableSelfTest.java  |    5 +
 ...dStartupWithUndefinedIgniteHomeSelfTest.java |   11 +-
 .../internal/util/IgniteDevOnlyLogTest.java     |    7 +
 .../util/IgniteExceptionRegistrySelfTest.java   |    8 +-
 .../internal/util/IgniteUtilsSelfTest.java      |  359 +-
 .../internal/util/StripedExecutorTest.java      |   10 +
 .../util/future/GridCompoundFutureSelfTest.java |   11 +-
 .../util/future/GridEmbeddedFutureSelfTest.java |    8 +-
 .../util/future/GridFutureAdapterSelfTest.java  |   12 +-
 .../util/future/GridFutureQueueTest.java        |    3 +-
 .../util/future/IgniteFutureImplTest.java       |   18 +-
 .../nio/GridNioEmbeddedFutureSelfTest.java      |    7 +-
 .../util/future/nio/GridNioFutureSelfTest.java  |   10 +-
 ...dUnsafeDataInputOutputByteOrderSelfTest.java |   24 +-
 ...GridUnsafeDataOutputArraySizingSelfTest.java |   12 +-
 .../IpcSharedMemoryCrashDetectionSelfTest.java  |   11 +-
 .../IpcSharedMemoryNativeLoaderSelfTest.java    |    7 +-
 .../ipc/shmem/IpcSharedMemorySpaceSelfTest.java |   12 +-
 .../ipc/shmem/IpcSharedMemoryUtilsSelfTest.java |    8 +-
 .../nio/GridNioDelimitedBufferSelfTest.java     |    8 +-
 .../internal/util/nio/GridNioSelfTest.java      |   17 +
 .../util/nio/GridNioSessionMetaKeySelfTest.java |    7 +-
 .../internal/util/nio/GridNioSslSelfTest.java   |    8 +-
 .../internal/util/nio/GridRoundTripTest.java    |    8 +-
 .../nio/IgniteExceptionInNioWorkerSelfTest.java |    5 +
 .../nio/impl/GridNioFilterChainSelfTest.java    |    7 +-
 .../offheap/GridOffHeapMapAbstractSelfTest.java |   22 +-
 .../GridOffHeapMapPerformanceAbstractTest.java  |    9 +-
 ...idOffHeapPartitionedMapAbstractSelfTest.java |   29 +-
 ...apPartitionedMapPerformanceAbstractTest.java |   10 +-
 .../unsafe/GridUnsafeMemorySelfTest.java        |   16 +
 .../unsafe/GridUnsafeStripedLruSefTest.java     |   13 +-
 .../tostring/CircularStringBuilderSelfTest.java |    6 +
 .../tostring/GridToStringBuilderSelfTest.java   |  100 +
 .../tostring/IncludeSensitiveAbstractTest.java  |    5 +
 .../org/apache/ignite/jvmtest/FileIOTest.java   |    9 +-
 .../apache/ignite/jvmtest/FileLocksTest.java    |    8 +-
 .../ignite/jvmtest/LinkedHashMapTest.java       |    9 +-
 .../ignite/jvmtest/NetworkFailureTest.java      |   10 +-
 .../QueueSizeCounterMultiThreadedTest.java      |    9 +-
 .../jvmtest/ReadWriteLockMultiThreadedTest.java |   11 +-
 .../org/apache/ignite/jvmtest/RegExpTest.java   |    7 +-
 .../jvmtest/ServerSocketMultiThreadedTest.java  |    7 +-
 .../ignite/lang/GridBasicPerformanceTest.java   |    3 -
 .../ignite/lang/GridByteArrayListSelfTest.java  |   13 +-
 .../ignite/lang/GridFuncPerformanceTest.java    |    8 +-
 .../lang/GridMetadataAwareAdapterLoadTest.java  |    5 +
 .../lang/GridMetadataAwareAdapterSelfTest.java  |    5 +
 .../ignite/lang/GridSetWrapperSelfTest.java     |   12 +-
 .../apache/ignite/lang/GridTupleSelfTest.java   |    8 +
 .../org/apache/ignite/lang/GridXSelfTest.java   |   10 +-
 .../apache/ignite/lang/IgniteUuidSelfTest.java  |   11 +-
 ...dBoundedConcurrentLinkedHashMapSelfTest.java |    5 +
 ...GridBoundedConcurrentOrderedMapSelfTest.java |    8 +-
 .../utils/GridBoundedPriorityQueueSelfTest.java |    5 +
 .../GridCircularBufferPerformanceTest.java      |   11 +-
 .../lang/utils/GridCircularBufferSelfTest.java  |   10 +-
 .../GridConcurrentLinkedHashMapSelfTest.java    |   11 +
 .../GridConcurrentWeakHashSetSelfTest.java      |   11 +-
 .../lang/utils/GridConsistentHashSelfTest.java  |   11 +-
 .../lang/utils/GridLeanIdentitySetSelfTest.java |    7 +-
 .../lang/utils/GridLeanMapPerformanceTest.java  |    9 +-
 .../ignite/lang/utils/GridLeanMapSelfTest.java  |   17 +-
 .../ignite/lang/utils/GridListSetSelfTest.java  |    9 +-
 .../lang/utils/GridStripedLockSelfTest.java     |    9 +-
 .../IgniteOffheapReadWriteLockSelfTest.java     |    9 +
 .../loadtests/GridCacheLoadPopulationTask.java  |    1 -
 .../loadtests/GridCacheMultiNodeLoadTest.java   |    7 +-
 .../loadtests/GridLoadTestStatistics.java       |    1 -
 .../loadtests/GridSingleExecutionTest.java      |    1 -
 .../cache/GridCacheAbstractLoadTest.java        |    3 -
 .../loadtests/cache/GridCacheBenchmark.java     |    1 -
 .../GridCacheWriteBehindStoreLoadTest.java      |    9 +-
 .../communication/GridIoManagerBenchmark.java   |    2 -
 .../communication/GridIoManagerBenchmark0.java  |   12 +-
 .../GridTcpCommunicationBenchmark.java          |    2 +-
 .../GridCachePartitionedAtomicLongLoadTest.java |    7 +-
 .../direct/multisplit/GridLoadTestJob.java      |    1 -
 .../multisplit/GridMultiSplitsLoadTest.java     |    7 +-
 .../GridMultiSplitsRedeployLoadTest.java        |    7 +-
 ...ridSingleSplitsNewNodesAbstractLoadTest.java |    6 +-
 .../GridSingleSplitsRedeployLoadTest.java       |    6 +-
 .../direct/session/GridSessionLoadTest.java     |    6 +-
 .../direct/stealing/GridStealingLoadTest.java   |    6 +-
 .../ignite/loadtests/dsi/GridDsiClient.java     |    5 +-
 .../loadtests/dsi/GridDsiLifecycleBean.java     |    1 -
 .../ignite/loadtests/dsi/GridDsiPerfJob.java    |    1 -
 .../ignite/loadtests/dsi/GridDsiRequest.java    |    4 +-
 .../ignite/loadtests/dsi/GridDsiResponse.java   |    3 -
 .../ignite/loadtests/dsi/GridDsiSession.java    |    1 -
 .../cacheget/GridBenchmarkCacheGetLoadTest.java |    2 +-
 ...dBoundedConcurrentLinkedHashSetLoadTest.java |    3 +-
 .../loadtests/hashmap/GridCacheTestContext.java |    7 +-
 .../loadtests/hashmap/GridHashMapLoadTest.java  |    7 +
 .../job/GridJobExecutionLoadTestClient.java     |    1 -
 ...GridJobExecutionLoadTestClientSemaphore.java |    1 -
 .../job/GridJobExecutionSingleNodeLoadTest.java |    3 +-
 .../loadtests/nio/GridNioBenchmarkTest.java     |    1 -
 .../ignite/loadtests/util/GridLoadTestArgs.java |    2 -
 .../ignite/logger/java/JavaLoggerTest.java      |    7 +-
 ...namicProxySerializationMultiJvmSelfTest.java |    7 +
 .../marshaller/GridMarshallerAbstractTest.java  |   30 +-
 .../GridMarshallerMappingConsistencyTest.java   |    6 +
 .../GridMarshallerPerformanceTest.java          |   10 +-
 .../marshaller/MarshallerContextSelfTest.java   |   10 +
 .../MarshallerEnumDeadlockMultiJvmTest.java     |    7 +
 .../jdk/GridJdkMarshallerSelfTest.java          |    1 -
 ...GridMessagingNoPeerClassLoadingSelfTest.java |    7 +-
 .../ignite/messaging/GridMessagingSelfTest.java |   20 +-
 .../messaging/IgniteMessagingSendAsyncTest.java |   12 +
 .../IgniteMessagingWithClientTest.java          |    7 +-
 .../p2p/DeploymentClassLoaderCallableTest.java  |    7 +
 .../p2p/GridAbstractMultinodeRedeployTest.java  |    1 -
 ...MultinodeRedeployContinuousModeSelfTest.java |    7 +-
 ...idMultinodeRedeployIsolatedModeSelfTest.java |    7 +-
 ...ridMultinodeRedeployPrivateModeSelfTest.java |    7 +-
 ...GridMultinodeRedeploySharedModeSelfTest.java |    7 +-
 .../ignite/p2p/GridP2PClassLoadingSelfTest.java |   10 +-
 .../GridP2PContinuousDeploymentSelfTest.java    |    8 +-
 .../GridP2PDifferentClassLoaderSelfTest.java    |   16 +-
 .../p2p/GridP2PDoubleDeploymentSelfTest.java    |   11 +-
 .../p2p/GridP2PHotRedeploymentSelfTest.java     |   16 +-
 .../p2p/GridP2PJobClassLoaderSelfTest.java      |   10 +-
 .../p2p/GridP2PLocalDeploymentSelfTest.java     |   12 +-
 .../GridP2PMissedResourceCacheSizeSelfTest.java |   16 +-
 .../ignite/p2p/GridP2PNodeLeftSelfTest.java     |    8 +-
 .../p2p/GridP2PRecursionTaskSelfTest.java       |    8 +
 .../p2p/GridP2PRemoteClassLoadersSelfTest.java  |   11 +-
 .../p2p/GridP2PSameClassLoaderSelfTest.java     |    8 +
 .../p2p/GridP2PTestTaskExecutionTest.java       |    8 +-
 .../ignite/p2p/GridP2PTimeoutSelfTest.java      |   15 +-
 .../ignite/p2p/GridP2PUndeploySelfTest.java     |   16 +-
 .../ignite/p2p/P2PScanQueryUndeployTest.java    |    5 +
 .../ignite/p2p/P2PStreamingClassLoaderTest.java |    7 +
 .../apache/ignite/p2p/SharedDeploymentTest.java |    5 +
 .../platform/PlatformCacheEntryEventFilter.java |    4 +-
 .../PlatformCacheEntryEventFilterFactory.java   |    1 -
 .../platform/PlatformCacheWriteMetricsTask.java |    1 -
 .../PlatformComputeBinarizableArgTask.java      |    1 -
 .../platform/PlatformComputeDecimalTask.java    |    3 +-
 ...latformDefaultJavaObjectFactorySelfTest.java |   13 +-
 .../platform/PlatformDeployServiceTask.java     |    2 -
 .../platform/PlatformEventsWriteEventTask.java  |    4 +-
 .../PlatformJavaObjectFactoryProxySelfTest.java |   13 +-
 .../SecurityPermissionSetBuilderTest.java       |    7 +-
 .../services/ServiceThreadPoolSelfTest.java     |    8 +
 ...SessionCancelSiblingsFromFutureSelfTest.java |    9 +-
 ...ridSessionCancelSiblingsFromJobSelfTest.java |   10 +-
 ...idSessionCancelSiblingsFromTaskSelfTest.java |   11 +-
 .../session/GridSessionCheckpointSelfTest.java  |    7 +
 .../GridSessionCollisionSpiSelfTest.java        |    7 +-
 ...idSessionFutureWaitJobAttributeSelfTest.java |    9 +-
 ...dSessionFutureWaitTaskAttributeSelfTest.java |    9 +-
 .../session/GridSessionJobFailoverSelfTest.java |    8 +-
 ...GridSessionJobWaitTaskAttributeSelfTest.java |    9 +-
 .../ignite/session/GridSessionLoadSelfTest.java |    8 +-
 .../GridSessionSetFutureAttributeSelfTest.java  |    9 +-
 ...nSetFutureAttributeWaitListenerSelfTest.java |    7 +-
 .../GridSessionSetJobAttribute2SelfTest.java    |    7 +-
 ...GridSessionSetJobAttributeOrderSelfTest.java |    7 +-
 .../GridSessionSetJobAttributeSelfTest.java     |    9 +-
 ...sionSetJobAttributeWaitListenerSelfTest.java |    7 +-
 .../GridSessionSetTaskAttributeSelfTest.java    |    9 +-
 ...GridSessionTaskWaitJobAttributeSelfTest.java |    9 +-
 .../GridSessionWaitAttributeSelfTest.java       |   15 +-
 .../spi/GridSpiLocalHostInjectionTest.java      |   14 +-
 .../spi/GridSpiStartStopAbstractTest.java       |    8 +-
 .../spi/GridTcpSpiForwardingSelfTest.java       |   10 +-
 .../GridCheckpointSpiAbstractTest.java          |   10 +-
 .../cache/CacheCheckpointSpiConfigSelfTest.java |    7 +-
 .../CacheCheckpointSpiSecondCacheSelfTest.java  |    7 +-
 .../jdbc/JdbcCheckpointSpiConfigSelfTest.java   |    7 +-
 ...GridSharedFsCheckpointSpiConfigSelfTest.java |    7 +-
 ...redFsCheckpointSpiMultiThreadedSelfTest.java |    7 +-
 ...heckpointSpiMultipleDirectoriesSelfTest.java |    7 +-
 .../collision/GridTestCollisionTaskSession.java |    1 -
 ...GridFifoQueueCollisionSpiConfigSelfTest.java |    7 +-
 .../GridFifoQueueCollisionSpiSelfTest.java      |   10 +-
 ...bStealingCollisionSpiAttributesSelfTest.java |   13 +-
 ...idJobStealingCollisionSpiConfigSelfTest.java |    7 +-
 ...alingCollisionSpiCustomTopologySelfTest.java |    7 +-
 .../GridJobStealingCollisionSpiSelfTest.java    |   14 +-
 ...PriorityQueueCollisionSpiConfigSelfTest.java |    7 +-
 .../GridPriorityQueueCollisionSpiSelfTest.java  |   23 +-
 .../GridAbstractCommunicationSelfTest.java      |   11 +-
 .../communication/GridCacheMessageSelfTest.java |    6 +
 .../tcp/GridCacheDhtLockBackupSelfTest.java     |    6 +-
 .../GridTcpCommunicationSpiAbstractTest.java    |    9 +-
 ...mmunicationSpiConcurrentConnectSelfTest.java |   15 +-
 .../GridTcpCommunicationSpiConfigSelfTest.java  |    6 +
 .../tcp/GridTcpCommunicationSpiLanLoadTest.java |    9 +-
 ...cpCommunicationSpiMultithreadedSelfTest.java |    9 +-
 ...dTcpCommunicationSpiRecoveryAckSelfTest.java |   16 +-
 ...tionSpiRecoveryFailureDetectionSelfTest.java |    7 +-
 ...GridTcpCommunicationSpiRecoverySelfTest.java |   16 +-
 ...unicationSpiTcpFailureDetectionSelfTest.java |    7 +-
 ...IgniteTcpCommunicationConnectOnInitTest.java |  172 +
 ...iteTcpCommunicationHandshakeWaitSslTest.java |   35 +
 ...IgniteTcpCommunicationHandshakeWaitTest.java |  131 +
 ...CommunicationRecoveryAckClosureSelfTest.java |   16 +-
 .../tcp/TcpCommunicationSpiDropNodesTest.java   |    6 +
 .../TcpCommunicationSpiFaultyClientTest.java    |    6 +
 ...ommunicationSpiHalfOpenedConnectionTest.java |    6 +
 .../TcpCommunicationSpiSkipMessageSendTest.java |    5 +
 .../tcp/TcpCommunicationStatisticsTest.java     |    5 +
 .../local/GridLocalDeploymentSpiSelfTest.java   |    6 +
 .../AbstractDiscoveryRandomStartStopTest.java   |    8 +-
 .../discovery/AbstractDiscoverySelfTest.java    |   14 +-
 .../spi/discovery/AbstractDiscoveryTest.java    |    9 +-
 .../discovery/AuthenticationRestartTest.java    |    5 +
 ...ClusterMetricsSnapshotSerializeSelfTest.java |    7 +
 .../FilterDataForClientNodeDiscoveryTest.java   |    8 +-
 .../IgniteDiscoveryCacheReuseSelfTest.java      |    7 +-
 .../LongClientConnectToClusterTest.java         |    5 +
 .../DiscoveryUnmarshalVulnerabilityTest.java    |   10 +
 .../discovery/tcp/IgniteClientConnectTest.java  |    8 +-
 ...gniteClientReconnectMassiveShutdownTest.java |    7 +
 ...pClientDiscoveryMarshallerCheckSelfTest.java |    7 +
 ...ClientDiscoverySpiCoordinatorChangeTest.java |  126 +
 ...lientDiscoverySpiFailureTimeoutSelfTest.java |   11 +
 .../tcp/TcpClientDiscoverySpiMulticastTest.java |    9 +-
 .../tcp/TcpClientDiscoverySpiSelfTest.java      |   57 +-
 .../TcpClientDiscoveryUnresolvedHostTest.java   |    5 +
 .../TcpDiscoveryClientSuspensionSelfTest.java   |    7 +
 .../tcp/TcpDiscoveryConcurrentStartTest.java    |    8 +-
 .../tcp/TcpDiscoveryIpFinderCleanerTest.java    |  168 +
 .../TcpDiscoveryMarshallerCheckSelfTest.java    |    8 +-
 .../tcp/TcpDiscoveryMultiThreadedTest.java      |   31 +-
 ...veryNodeAttributesUpdateOnReconnectTest.java |    5 +
 ...DiscoveryNodeConfigConsistentIdSelfTest.java |    7 +-
 .../TcpDiscoveryNodeConsistentIdSelfTest.java   |    7 +-
 .../TcpDiscoveryPendingMessageDeliveryTest.java |   69 +-
 .../discovery/tcp/TcpDiscoveryRestartTest.java  |   15 +-
 .../tcp/TcpDiscoverySegmentationPolicyTest.java |    5 +
 .../spi/discovery/tcp/TcpDiscoverySelfTest.java |   55 +-
 .../tcp/TcpDiscoverySnapshotHistoryTest.java    |   10 +-
 .../tcp/TcpDiscoverySpiConfigSelfTest.java      |    6 +
 .../TcpDiscoverySpiFailureTimeoutSelfTest.java  |    9 +
 .../discovery/tcp/TcpDiscoverySpiMBeanTest.java |    5 +
 .../tcp/TcpDiscoverySpiReconnectDelayTest.java  |   12 +
 .../discovery/tcp/TcpDiscoverySpiSelfTest.java  |    1 -
 .../tcp/TcpDiscoverySpiWildcardSelfTest.java    |    7 +-
 .../tcp/TcpDiscoverySslParametersTest.java      |   12 +
 .../TcpDiscoverySslSecuredUnsecuredTest.java    |   12 +
 .../TcpDiscoverySslTrustedUntrustedTest.java    |   11 +
 .../tcp/TcpDiscoveryWithWrongServerTest.java    |    8 +
 .../TcpDiscoveryIpFinderAbstractSelfTest.java   |    6 +-
 .../jdbc/TcpDiscoveryJdbcIpFinderSelfTest.java  |    7 +-
 .../TcpDiscoveryMulticastIpFinderSelfTest.java  |    9 +-
 .../TcpDiscoverySharedFsIpFinderSelfTest.java   |    7 +-
 .../vm/TcpDiscoveryVmIpFinderSelfTest.java      |    9 +-
 .../KeystoreEncryptionSpiSelfTest.java          |   15 +-
 ...MemoryEventStorageMultiThreadedSelfTest.java |    7 +-
 ...GridMemoryEventStorageSpiConfigSelfTest.java |    7 +-
 .../GridMemoryEventStorageSpiSelfTest.java      |    7 +-
 .../GridAlwaysFailoverSpiConfigSelfTest.java    |    7 +-
 .../always/GridAlwaysFailoverSpiSelfTest.java   |   11 +-
 ...ridJobStealingFailoverSpiConfigSelfTest.java |    7 +-
 ...idJobStealingFailoverSpiOneNodeSelfTest.java |    8 +-
 .../GridJobStealingFailoverSpiSelfTest.java     |   14 +-
 .../never/GridNeverFailoverSpiSelfTest.java     |    7 +-
 ...dAdaptiveLoadBalancingSpiConfigSelfTest.java |    7 +-
 ...iveLoadBalancingSpiMultipleNodeSelfTest.java |    7 +-
 .../GridAdaptiveLoadBalancingSpiSelfTest.java   |    9 +-
 ...aptiveLoadBalancingSpiStartStopSelfTest.java |    1 -
 .../GridInternalTasksLoadBalancingSelfTest.java |    6 +
 ...alancingNotPerTaskMultithreadedSelfTest.java |    7 +-
 ...dRobinLoadBalancingSpiLocalNodeSelfTest.java |    7 +-
 ...inLoadBalancingSpiMultipleNodesSelfTest.java |    8 +-
 ...RobinLoadBalancingSpiNotPerTaskSelfTest.java |   10 +-
 ...dRobinLoadBalancingSpiStartStopSelfTest.java |    1 -
 ...nLoadBalancingSpiTopologyChangeSelfTest.java |    7 +-
 ...tedRandomLoadBalancingSpiConfigSelfTest.java |    7 +-
 ...dWeightedRandomLoadBalancingSpiSelfTest.java |    8 +-
 ...RandomLoadBalancingSpiStartStopSelfTest.java |    1 -
 ...dRandomLoadBalancingSpiWeightedSelfTest.java |    7 +-
 .../startup/GridRandomCommandLineLoader.java    |    1 -
 .../ignite/startup/GridVmNodesStarter.java      |    1 -
 .../cmdline/GridCommandLineLoaderTest.java      |    5 +
 .../GridCommandLineTransformerSelfTest.java     |   13 +-
 .../properties/NotStringSystemPropertyTest.java |    5 +
 .../startup/servlet/GridServletLoaderTest.java  |    8 +-
 .../stream/socket/SocketStreamerSelfTest.java   |   15 +-
 ...ocketStreamerUnmarshalVulnerabilityTest.java |   10 +
 .../testframework/GridSpiTestContext.java       |   12 -
 .../GridTestExternalClassLoader.java            |    1 -
 .../ignite/testframework/GridTestNode.java      |    3 +-
 .../ignite/testframework/GridTestThread.java    |    4 +-
 .../ignite/testframework/GridTestUtils.java     |  207 +-
 .../ignite/testframework/LogListener.java       |   76 +-
 .../testframework/MvccFeatureChecker.java       |  162 +
 .../ConfigVariationsFactory.java                |    1 -
 .../ConfigVariationsTestSuiteBuilder.java       |    2 -
 .../configvariations/Parameters.java            |    5 -
 .../testframework/junits/GridAbstractTest.java  |  194 +-
 ...IgniteCacheConfigVariationsAbstractTest.java |    2 -
 .../junits/IgniteTestResources.java             |    1 -
 .../cache/GridAbstractCacheStoreSelfTest.java   |   10 +
 .../junits/cache/TestCacheSession.java          |    2 -
 .../cache/TestThreadLocalCacheSession.java      |    2 -
 .../junits/common/GridAbstractExamplesTest.java |    5 +-
 .../GridAbstractLifecycleAwareSelfTest.java     |    7 +-
 .../junits/common/GridCommonAbstractTest.java   |  111 +-
 .../multijvm/IgniteCacheProcessProxy.java       |    1 -
 .../junits/multijvm/IgniteProcessProxy.java     |    6 +-
 .../junits/spi/GridSpiAbstractTest.java         |   13 +-
 .../testframework/junits/spi/GridSpiTest.java   |    1 -
 .../junits/spi/GridSpiTestConfig.java           |    3 +-
 .../ConfigVariationsTestSuiteBuilderTest.java   |    7 +
 .../test/ListeningTestLoggerTest.java           |   91 +-
 .../testframework/test/ParametersTest.java      |    7 +-
 .../test/VariationsIteratorTest.java            |   13 +-
 .../ignite/testsuites/IgniteBasicTestSuite.java |  136 +-
 .../IgniteBasicWithPersistenceTestSuite.java    |   43 +-
 .../testsuites/IgniteBinaryCacheTestSuite.java  |   46 +-
 .../IgniteBinaryObjectsCacheTestSuite3.java     |   18 +-
 ...IgniteBinaryObjectsComputeGridTestSuite.java |    6 +-
 .../IgniteBinaryObjectsTestSuite.java           |  140 +-
 ...eBlockExchangeOnReadOperationsTestSuite.java |   10 +-
 ...eCacheDataStructuresBinarySelfTestSuite.java |   51 +
 .../IgniteCacheDataStructuresSelfTestSuite.java |  154 +-
 .../IgniteCacheEvictionSelfTestSuite.java       |   70 +-
 .../IgniteCacheFailoverTestSuite.java           |   39 +-
 .../IgniteCacheFailoverTestSuite2.java          |   36 +-
 .../IgniteCacheFailoverTestSuite3.java          |   10 +-
 .../IgniteCacheFailoverTestSuiteSsl.java        |    6 +-
 ...IgniteCacheFullApiMultiJvmSelfTestSuite.java |   54 +-
 .../IgniteCacheFullApiSelfTestSuite.java        |  147 +-
 .../IgniteCacheIteratorsSelfTestSuite.java      |   14 +-
 .../IgniteCacheLoadConsistencyTestSuite.java    |   10 +-
 .../IgniteCacheMetricsSelfTestSuite.java        |   45 +-
 .../testsuites/IgniteCacheMvccTestSuite.java    |   41 +-
 .../testsuites/IgniteCacheMvccTestSuite1.java   |  245 ++
 .../testsuites/IgniteCacheMvccTestSuite2.java   |  198 +
 .../testsuites/IgniteCacheMvccTestSuite3.java   |  134 +
 .../testsuites/IgniteCacheMvccTestSuite4.java   |  198 +
 .../testsuites/IgniteCacheMvccTestSuite5.java   |   94 +
 .../testsuites/IgniteCacheMvccTestSuite6.java   |   93 +
 .../testsuites/IgniteCacheMvccTestSuite7.java   |   81 +
 .../testsuites/IgniteCacheMvccTestSuite8.java   |  131 +
 .../testsuites/IgniteCacheMvccTestSuite9.java   |   57 +
 .../IgniteCacheNearOnlySelfTestSuite.java       |   31 +-
 .../testsuites/IgniteCacheRestartTestSuite.java |   18 +-
 .../IgniteCacheRestartTestSuite2.java           |   18 +-
 .../IgniteCacheTcpClientDiscoveryTestSuite.java |   43 +-
 .../ignite/testsuites/IgniteCacheTestSuite.java |  317 +-
 .../testsuites/IgniteCacheTestSuite2.java       |  324 +-
 .../testsuites/IgniteCacheTestSuite3.java       |  162 +-
 .../testsuites/IgniteCacheTestSuite4.java       |  356 +-
 .../testsuites/IgniteCacheTestSuite5.java       |   79 +-
 .../testsuites/IgniteCacheTestSuite6.java       |   91 +-
 .../testsuites/IgniteCacheTestSuite7.java       |   56 +-
 .../testsuites/IgniteCacheTestSuite8.java       |   35 +-
 .../testsuites/IgniteCacheTestSuite9.java       |   36 +-
 .../IgniteCacheTxRecoverySelfTestSuite.java     |   28 +-
 .../IgniteCacheWriteBehindTestSuite.java        |   33 +-
 .../testsuites/IgniteClientNodesTestSuite.java  |   12 +-
 .../IgniteClientReconnectTestSuite.java         |   34 +-
 .../testsuites/IgniteComputeGridTestSuite.java  |  143 +-
 .../IgniteContinuousTaskSelfTestSuite.java      |   11 +-
 .../testsuites/IgniteDatabaseTestSuite.java     |    8 +-
 .../testsuites/IgniteDbMemoryLeakTestSuite.java |   16 +-
 .../IgniteExternalizableSelfTestSuite.java      |    5 +-
 .../ignite/testsuites/IgniteIgfsTestSuite.java  |  106 +-
 .../IgniteIpcSharedMemorySelfTestSuite.java     |   11 +-
 .../IgniteJobMetricsSelfTestSuite.java          |    5 +-
 .../testsuites/IgniteKernalSelfTestSuite.java   |  131 +-
 .../testsuites/IgniteLangSelfTestSuite.java     |   57 +-
 .../testsuites/IgniteLoggingSelfTestSuite.java  |    3 +-
 .../testsuites/IgniteLostAndFoundTestSuite.java |   27 +-
 .../testsuites/IgniteP2PSelfTestSuite.java      |   39 +-
 .../testsuites/IgnitePdsMvccTestSuite.java      |   90 +
 .../testsuites/IgnitePdsMvccTestSuite2.java     |   97 +
 .../testsuites/IgnitePdsMvccTestSuite3.java     |   43 +
 .../testsuites/IgnitePdsMvccTestSuite4.java     |   53 +
 .../ignite/testsuites/IgnitePdsTestSuite.java   |  105 +-
 .../ignite/testsuites/IgnitePdsTestSuite2.java  |  128 +-
 .../ignite/testsuites/IgnitePdsTestSuite3.java  |   26 +-
 .../ignite/testsuites/IgnitePdsTestSuite4.java  |   43 +-
 .../testsuites/IgnitePerformanceTestSuite.java  |   49 +-
 .../testsuites/IgnitePlatformsTestSuite.java    |    5 +-
 .../testsuites/IgniteReproducingSuite.java      |    2 +-
 .../testsuites/IgniteRestHandlerTestSuite.java  |   14 +-
 .../IgniteSpiCheckpointSelfTestSuite.java       |   27 +-
 .../IgniteSpiCollisionSelfTestSuite.java        |   28 +-
 .../IgniteSpiCommunicationSelfTestSuite.java    |   54 +-
 .../IgniteSpiDeploymentSelfTestSuite.java       |    7 +-
 .../IgniteSpiDiscoverySelfTestSuite.java        |   95 +-
 .../IgniteSpiEventStorageSelfTestSuite.java     |   11 +-
 .../IgniteSpiFailoverSelfTestSuite.java         |   21 +-
 .../IgniteSpiLoadBalancingSelfTestSuite.java    |   31 +-
 .../ignite/testsuites/IgniteSpiTestSuite.java   |    7 +-
 .../testsuites/IgniteStandByClusterSuite.java   |   43 +-
 .../testsuites/IgniteStartUpTestSuite.java      |    3 +-
 .../testsuites/IgniteStreamSelfTestSuite.java   |    7 +-
 .../IgniteTaskSessionSelfTestSuite.java         |   41 +-
 .../IgniteTimeoutProcessorSelfTestSuite.java    |    5 +-
 .../IgniteTopologyValidatorTestSuite.java       |   34 +-
 .../testsuites/IgniteUtilSelfTestSuite.java     |   85 +-
 .../TxDeadlockDetectionTestSuite.java           |   24 +-
 .../GridThreadPoolExecutorServiceSelfTest.java  |   11 +-
 .../apache/ignite/thread/GridThreadTest.java    |    7 +-
 .../ignite/thread/IgniteThreadPoolSizeTest.java |   13 +
 .../util/AttributeNodeFilterSelfTest.java       |   11 +-
 .../ignite/util/GridCommandHandlerSslTest.java  |  173 +
 .../ignite/util/GridCommandHandlerTest.java     |  451 ++-
 ...dConcurrentLinkedDequeMultiThreadedTest.java |    6 +-
 .../util/GridConcurrentLinkedDequeSelfTest.java |   11 +-
 ...rrentLinkedHashMapMultiThreadedSelfTest.java |   14 +
 .../apache/ignite/util/GridIntListSelfTest.java |    8 +
 .../GridInternalTaskUnusedWalSegmentsTest.java  |    5 +
 .../apache/ignite/util/GridLogThrottleTest.java |    5 +
 .../ignite/util/GridLongListSelfTest.java       |   11 +-
 .../ignite/util/GridMessageCollectionTest.java  |    5 +
 .../ignite/util/GridPartitionMapSelfTest.java   |   10 +
 .../apache/ignite/util/GridQueueSelfTest.java   |    7 +-
 .../apache/ignite/util/GridRandomSelfTest.java  |    5 +
 .../ignite/util/GridSnapshotLockSelfTest.java   |    7 +-
 .../util/GridSpinReadWriteLockSelfTest.java     |   10 +-
 .../util/GridStringBuilderFactorySelfTest.java  |    7 +-
 .../util/GridTopologyHeapSizeSelfTest.java      |    9 +-
 .../apache/ignite/util/GridTransientTest.java   |    7 +-
 .../util/mbeans/GridMBeanBaselineTest.java      |    5 +
 .../util/mbeans/GridMBeanDisableSelfTest.java   |   14 +-
 .../mbeans/GridMBeanExoticNamesSelfTest.java    |    8 +-
 .../ignite/util/mbeans/GridMBeanSelfTest.java   |   10 +
 .../util/mbeans/WorkersControlMXBeanTest.java   |  202 +-
 .../ignite/development/utils/WalStat.java       |    4 +-
 modules/direct-io/README.md                     |   62 +
 modules/direct-io/pom.xml                       |   17 +-
 .../file/AlignedBuffersDirectFileIO.java        |  112 +-
 .../file/AlignedBuffersDirectFileIOFactory.java |   25 +-
 .../persistence/file/IgniteNativeIoLib.java     |    2 +-
 ...kPageCompressionIntegrationDirectIOTest.java |   31 +
 ...lWalModeChangeDuringRebalancingSelfTest.java |    6 +
 .../persistence/file/IgniteFileIOTest.java      |   23 +
 .../IgniteNativeIoWithNoPersistenceTest.java    |    5 +
 .../testsuites/IgnitePdsNativeIoTestSuite.java  |    9 +-
 .../testsuites/IgnitePdsNativeIoTestSuite2.java |   16 +-
 .../IgnitePdsReplacementNativeIoTest.java       |    5 +
 .../tests/p2p/GridExternalAffinityFunction.java |    1 -
 .../ignite/tests/p2p/JobStealingTask.java       |    2 -
 .../uri/tasks/GridUriDeploymentTestTask1.java   |    1 -
 .../uri/tasks/GridUriDeploymentTestTask2.java   |    1 -
 .../apache/ignite/sink/flink/IgniteSink.java    |    1 -
 .../sink/flink/FlinkIgniteSinkSelfTest.java     |    8 +-
 .../flink/FlinkIgniteSinkSelfTestSuite.java     |    7 +-
 .../ignite/stream/flume/IgniteSinkTest.java     |    5 +
 .../stream/flume/IgniteSinkTestSuite.java       |    6 +-
 .../ignite/testsuites/IgniteGCETestSuite.java   |    8 +-
 .../query/h2/H2IndexingAbstractGeoSelfTest.java |   15 +-
 .../testsuites/GeoSpatialIndexingTestSuite.java |   10 +-
 .../hadoop/fs/v1/IgniteHadoopFileSystem.java    |    7 -
 .../hadoop/fs/v2/IgniteHadoopFileSystem.java    |    2 -
 .../IgniteHadoopClientProtocolProvider.java     |    1 -
 .../planner/HadoopAbstractMapReducePlanner.java |    1 -
 .../processors/hadoop/HadoopSplitWrapper.java   |    1 -
 .../hadoop/delegate/HadoopDelegateUtils.java    |    1 -
 .../hadoop/impl/igfs/HadoopIgfsUtils.java       |    1 -
 .../processors/hadoop/impl/v2/HadoopDaemon.java |    1 -
 .../hadoop/impl/v2/HadoopV2CleanupTask.java     |    1 -
 .../processors/hadoop/impl/v2/HadoopV2Job.java  |    2 +-
 .../hadoop/impl/v2/HadoopV2MapTask.java         |    2 +-
 .../hadoop/impl/v2/HadoopV2ReduceTask.java      |    2 +-
 .../hadoop/impl/v2/HadoopV2SetupTask.java       |    1 -
 .../hadoop/impl/v2/HadoopV2TaskContext.java     |    1 -
 .../hadoop/jobtracker/HadoopJobTracker.java     |    5 +-
 .../hadoop/proto/HadoopProtocolTaskAdapter.java |    1 -
 .../hadoop/shuffle/HadoopShuffleJob.java        |    3 -
 .../shuffle/collections/HadoopSkipList.java     |    1 -
 .../hadoop/taskexecutor/HadoopRunnableTask.java |    1 -
 .../child/HadoopChildProcessRunner.java         |    1 -
 .../HadoopExternalCommunication.java            |    1 -
 .../hadoop/impl/HadoopCommandLineTest.java      |    8 +-
 .../hadoop/impl/HadoopFileSystemsTest.java      |    7 +-
 .../hadoop/impl/HadoopGroupingTest.java         |   10 +-
 .../hadoop/impl/HadoopJobTrackerSelfTest.java   |    8 +-
 .../impl/HadoopMapReduceEmbeddedSelfTest.java   |    8 +-
 .../HadoopMapReduceErrorResilienceTest.java     |   12 +-
 .../hadoop/impl/HadoopMapReduceTest.java        |    7 +-
 .../impl/HadoopNoHadoopMapReduceTest.java       |    5 +
 .../HadoopSerializationWrapperSelfTest.java     |    8 +-
 .../hadoop/impl/HadoopSnappyTest.java           |    5 +
 .../hadoop/impl/HadoopSortingTest.java          |    7 +-
 .../hadoop/impl/HadoopSplitWrapperSelfTest.java |    7 +-
 .../processors/hadoop/impl/HadoopStartup.java   |    1 -
 .../impl/HadoopTaskExecutionSelfTest.java       |   11 +-
 .../impl/HadoopTasksVersionsAbstractTest.java   |    8 +
 .../hadoop/impl/HadoopTeraSortTest.java         |    6 +
 .../hadoop/impl/HadoopTxConfigCacheTest.java    |    9 +-
 .../hadoop/impl/HadoopUserLibsSelfTest.java     |   10 +
 .../hadoop/impl/HadoopV2JobSelfTest.java        |    7 +-
 .../hadoop/impl/HadoopValidationSelfTest.java   |    7 +-
 .../HadoopWeightedMapReducePlannerTest.java     |    7 +
 ...opClientProtocolMultipleServersSelfTest.java |   13 +-
 .../client/HadoopClientProtocolSelfTest.java    |    9 +-
 ...KerberosHadoopFileSystemFactorySelfTest.java |    9 +-
 .../impl/igfs/Hadoop1OverIgfsProxyTest.java     |    7 +-
 .../igfs/HadoopFIleSystemFactorySelfTest.java   |    6 +-
 .../HadoopIgfs20FileSystemAbstractSelfTest.java |   62 +
 .../igfs/HadoopIgfsDualAbstractSelfTest.java    |    7 +-
 ...oopSecondaryFileSystemConfigurationTest.java |    9 +-
 .../hadoop/impl/igfs/IgfsEventsTestSuite.java   |   21 +-
 .../igfs/IgfsNearOnlyMultiNodeSelfTest.java     |    5 +
 .../IgniteHadoopFileSystemAbstractSelfTest.java |   78 +-
 ...opFileSystemClientBasedAbstractSelfTest.java |    8 +-
 ...niteHadoopFileSystemClientBasedOpenTest.java |    7 +
 .../IgniteHadoopFileSystemClientSelfTest.java   |    7 +-
 ...IgniteHadoopFileSystemHandshakeSelfTest.java |    9 +-
 .../IgniteHadoopFileSystemIpcCacheSelfTest.java |    7 +-
 .../IgniteHadoopFileSystemLoggerSelfTest.java   |   10 +-
 ...niteHadoopFileSystemLoggerStateSelfTest.java |   14 +-
 ...teHadoopFileSystemShmemAbstractSelfTest.java |    8 +-
 ...emShmemExternalToClientAbstractSelfTest.java |    8 +-
 .../HadoopConcurrentHashMultimapSelftest.java   |    8 +-
 .../collections/HadoopHashMapSelfTest.java      |    7 +-
 .../collections/HadoopSkipListSelfTest.java     |    8 +-
 .../streams/HadoopDataStreamSelfTest.java       |    9 +-
 .../taskexecutor/HadoopExecutorServiceTest.java |    7 +-
 .../HadoopExternalTaskExecutionSelfTest.java    |    8 +-
 .../HadoopExternalCommunicationSelfTest.java    |    8 +-
 .../impl/util/BasicUserNameMapperSelfTest.java  |    7 +
 .../util/ChainedUserNameMapperSelfTest.java     |    9 +-
 .../util/KerberosUserNameMapperSelfTest.java    |    8 +
 .../testsuites/IgniteHadoopTestSuite.java       |  135 +-
 .../IgniteIgfsLinuxAndMacOSTestSuite.java       |   25 +-
 .../hibernate/CacheHibernateBlobStore.java      |    6 +-
 .../config/factory-incorrect-store-cache.xml    |    4 +
 .../HibernateL2CacheConfigurationSelfTest.java  |   23 +-
 .../hibernate/HibernateL2CacheMultiJvmTest.java |   33 +-
 .../hibernate/HibernateL2CacheSelfTest.java     |   14 +-
 .../HibernateL2CacheStrategySelfTest.java       |    7 +-
 .../CacheHibernateBlobStoreSelfTest.java        |    4 -
 .../CacheHibernateStoreFactorySelfTest.java     |   11 +-
 .../testsuites/IgniteHibernateTestSuite.java    |   22 +-
 .../hibernate/CacheHibernateBlobStore.java      |    6 +-
 .../config/factory-incorrect-store-cache.xml    |    4 +
 .../HibernateL2CacheConfigurationSelfTest.java  |   23 +-
 .../hibernate/HibernateL2CacheMultiJvmTest.java |   32 +-
 .../hibernate/HibernateL2CacheSelfTest.java     |   14 +-
 .../HibernateL2CacheStrategySelfTest.java       |    7 +-
 .../CacheHibernateBlobStoreSelfTest.java        |   10 +-
 .../CacheHibernateStoreFactorySelfTest.java     |   13 +-
 .../testsuites/IgniteHibernate5TestSuite.java   |   24 +-
 modules/hibernate-5.3/licenses/apache-2.0.txt   |  202 +
 modules/hibernate-5.3/pom.xml                   |  183 +
 .../cache/hibernate/HibernateKeyWrapper.java    |  109 +
 .../ignite/cache/hibernate/HibernateRegion.java |   74 +
 .../cache/hibernate/HibernateRegionFactory.java |  154 +
 .../hibernate/IgniteCachedDomainDataAccess.java |  121 +
 .../hibernate/IgniteCollectionDataAccess.java   |   61 +
 .../cache/hibernate/IgniteDomainDataRegion.java |  182 +
 .../cache/hibernate/IgniteEntityDataAccess.java |   80 +
 .../hibernate/IgniteGeneralDataRegion.java      |   89 +
 .../hibernate/IgniteNaturalIdDataAccess.java    |   80 +
 .../hibernate/IgniteQueryResultsRegion.java     |   70 +
 .../cache/hibernate/IgniteTimestampsRegion.java |   39 +
 .../ignite/cache/hibernate/package-info.java    |   24 +
 .../hibernate/CacheHibernateBlobStore.java      |  545 +++
 .../hibernate/CacheHibernateBlobStoreEntry.java |   89 +
 .../CacheHibernateBlobStoreFactory.java         |  235 ++
 .../CacheHibernateStoreSessionListener.java     |  226 ++
 .../cache/store/hibernate/package-info.java     |   22 +
 .../CacheHibernateBlobStoreEntry.hbm.xml        |   31 +
 .../src/test/config/factory-cache.xml           |   59 +
 .../src/test/config/factory-cache1.xml          |   61 +
 .../config/factory-incorrect-store-cache.xml    |   60 +
 .../HibernateL2CacheConfigurationSelfTest.java  |  409 +++
 .../hibernate/HibernateL2CacheMultiJvmTest.java |  441 +++
 .../hibernate/HibernateL2CacheSelfTest.java     | 1991 ++++++++++
 .../HibernateL2CacheStrategySelfTest.java       |  570 +++
 .../HibernateL2CacheTransactionalSelfTest.java  |  154 +
 ...nateL2CacheTransactionalUseSyncSelfTest.java |   31 +
 .../CacheHibernateBlobStoreNodeRestartTest.java |   46 +
 .../CacheHibernateBlobStoreSelfTest.java        |  118 +
 .../CacheHibernateStoreFactorySelfTest.java     |  336 ++
 ...heHibernateStoreSessionListenerSelfTest.java |  242 ++
 .../cache/store/hibernate/hibernate.cfg.xml     |   41 +
 .../cache/store/hibernate/package-info.java     |   22 +
 .../IgniteBinaryHibernate53TestSuite.java       |   37 +
 .../testsuites/IgniteHibernate53TestSuite.java  |   61 +
 .../cache/store/hibernate/hibernate.cfg.xml     |   41 +
 .../HibernateAccessStrategyAdapter.java         |   18 +-
 .../HibernateAccessStrategyFactory.java         |  144 +-
 .../cache/hibernate/HibernateCacheProxy.java    |  270 +-
 .../HibernateNonStrictAccessStrategy.java       |    8 +-
 .../HibernateReadOnlyAccessStrategy.java        |    8 +-
 .../HibernateReadWriteAccessStrategy.java       |   40 +-
 .../HibernateTransactionalAccessStrategy.java   |   26 +-
 .../cache/query/CacheQueryPartitionInfo.java    |  143 -
 .../cache/query/GridCacheTwoStepQuery.java      |   25 +-
 .../processors/cache/query/QueryTable.java      |    2 +
 .../processors/query/h2/ConnectionManager.java  |  513 +++
 .../query/h2/DmlStatementsProcessor.java        |   77 +-
 .../query/h2/H2ResultSetIterator.java           |    1 -
 .../processors/query/h2/H2RowCache.java         |   19 +-
 .../processors/query/h2/H2RowCacheRegistry.java |   46 +-
 .../internal/processors/query/h2/H2Schema.java  |   13 +-
 .../processors/query/h2/H2StatementCache.java   |    3 +-
 .../processors/query/h2/H2TableDescriptor.java  |  206 +-
 .../processors/query/h2/H2TableEngine.java      |    2 +-
 .../internal/processors/query/h2/H2Utils.java   |  321 +-
 .../processors/query/h2/IgniteH2Indexing.java   | 2011 +++-------
 .../processors/query/h2/IndexBuildClosure.java  |   54 +
 .../query/h2/IndexRebuildFullClosure.java       |   49 +
 .../query/h2/IndexRebuildPartialClosure.java    |   76 +
 .../query/h2/RebuildIndexFromHashClosure.java   |   47 -
 .../processors/query/h2/SchemaManager.java      |  716 ++++
 .../processors/query/h2/UpdateResult.java       |    1 -
 .../query/h2/affinity/PartitionAllNode.java     |   47 +
 .../h2/affinity/PartitionCompositeNode.java     |  314 ++
 .../PartitionCompositeNodeOperator.java         |   44 +
 .../h2/affinity/PartitionConstantNode.java      |   60 +
 .../query/h2/affinity/PartitionExtractor.java   |  369 ++
 .../query/h2/affinity/PartitionGroupNode.java   |  118 +
 .../query/h2/affinity/PartitionNode.java        |   45 +
 .../query/h2/affinity/PartitionNoneNode.java    |   48 +
 .../h2/affinity/PartitionParameterNode.java     |   81 +
 .../query/h2/affinity/PartitionResult.java      |   64 +
 .../query/h2/affinity/PartitionSingleNode.java  |   89 +
 .../h2/affinity/PartitionTableDescriptor.java   |   73 +
 .../query/h2/database/H2PkHashIndex.java        |    1 -
 .../processors/query/h2/database/H2Tree.java    |   98 +-
 .../query/h2/database/H2TreeClientIndex.java    |  114 +
 .../query/h2/database/H2TreeIndex.java          |  269 +-
 .../query/h2/database/H2TreeIndexBase.java      |   53 +
 .../query/h2/ddl/DdlStatementsProcessor.java    |  122 +-
 .../processors/query/h2/dml/DmlBatchSender.java |    2 +-
 .../h2/dml/DmlPageProcessingErrorResult.java    |    1 -
 .../query/h2/dml/DmlPageProcessingResult.java   |    1 -
 .../processors/query/h2/dml/DmlUtils.java       |    2 +-
 .../processors/query/h2/dml/FastUpdate.java     |    2 +-
 .../processors/query/h2/dml/UpdatePlan.java     |   48 +-
 .../query/h2/dml/UpdatePlanBuilder.java         |   80 +-
 .../query/h2/opt/GridH2CollocationModel.java    |   10 +-
 .../query/h2/opt/GridH2DefaultTableEngine.java  |    4 +-
 .../query/h2/opt/GridH2IndexBase.java           |    6 +-
 .../query/h2/opt/GridH2KeyValueRowOnheap.java   |   12 +-
 .../query/h2/opt/GridH2PrimaryScanIndex.java    |    1 -
 .../query/h2/opt/GridH2RowDescriptor.java       |  144 +-
 .../query/h2/opt/GridH2SystemIndexFactory.java  |   10 +-
 .../processors/query/h2/opt/GridH2Table.java    |  166 +-
 .../query/h2/opt/GridLuceneLockFactory.java     |    1 -
 .../query/h2/sql/GridSqlQueryParser.java        |   73 +-
 .../query/h2/sql/GridSqlQuerySplitter.java      |  340 +-
 .../query/h2/twostep/GridMapQueryExecutor.java  |    7 +-
 .../query/h2/twostep/GridMergeIndex.java        |    1 -
 .../h2/twostep/GridReduceQueryExecutor.java     |  637 +---
 .../query/h2/twostep/MapQueryResults.java       |    1 -
 .../h2/twostep/ReducePartitionMapResult.java    |   73 +
 .../query/h2/twostep/ReducePartitionMapper.java |  641 ++++
 .../h2/twostep/ReducePartitionsSpecializer.java |   61 +
 .../h2/twostep/msg/GridH2IndexRangeRequest.java |    2 +
 .../twostep/msg/GridH2IndexRangeResponse.java   |    2 +
 .../h2/twostep/msg/GridH2QueryRequest.java      |    6 +-
 .../h2/twostep/msg/GridH2ValueMessage.java      |    2 +
 .../visor/verify/ValidateIndexesClosure.java    |   18 +-
 .../visor/verify/VisorValidateIndexesTask.java  |   29 +
 ...ityKeyNameAndValueFieldNameConflictTest.java |  275 ++
 .../processors/cache/BigEntryQueryTest.java     |    5 +
 ...MetadataConcurrentUpdateWithIndexesTest.java |    5 +
 .../cache/BinarySerializationQuerySelfTest.java |    9 +
 .../cache/BinaryTypeMismatchLoggingTest.java    |   15 +-
 ...CacheAbstractQueryDetailMetricsSelfTest.java |   35 +-
 .../CacheAbstractQueryMetricsSelfTest.java      |   32 +-
 .../CacheBinaryKeyConcurrentQueryTest.java      |    5 +
 .../cache/CacheConfigurationP2PTest.java        |    7 +-
 .../cache/CacheIndexStreamerTest.java           |    6 +
 .../cache/CacheIteratorScanQueryTest.java       |    6 +
 .../CacheOffheapBatchIndexingMultiTypeTest.java |    8 +-
 ...CacheOffheapBatchIndexingSingleTypeTest.java |    9 +-
 .../CacheOperationsWithExpirationTest.java      |    6 +
 .../cache/CacheQueryBuildValueTest.java         |    5 +
 .../cache/CacheQueryEvictDataLostTest.java      |    5 +
 .../cache/CacheQueryFilterExpiredTest.java      |    5 +
 .../cache/CacheQueryNewClientSelfTest.java      |    6 +
 .../CacheRandomOperationsMultithreadedTest.java |    8 +
 ...CacheScanPartitionQueryFallbackSelfTest.java |   13 +-
 .../cache/CacheSqlQueryValueCopySelfTest.java   |   12 +
 .../ClientReconnectAfterClusterRestartTest.java |    5 +
 .../cache/ClusterReadOnlyModeSqlTest.java       |    5 +
 .../cache/DdlTransactionSelfTest.java           |   10 +
 .../cache/GridCacheCrossCacheQuerySelfTest.java |    7 +
 ...dCacheDynamicLoadOnClientPersistentTest.java |   44 +
 .../cache/GridCacheDynamicLoadOnClientTest.java |  328 ++
 .../cache/GridCacheFullTextQuerySelfTest.java   |   11 +-
 ...GridCacheLazyQueryPartitionsReleaseTest.java |    6 +
 .../cache/GridCacheOffHeapSelfTest.java         |    7 +-
 .../GridCacheOffheapIndexEntryEvictTest.java    |    8 +-
 .../cache/GridCacheOffheapIndexGetSelfTest.java |    9 +-
 .../GridCacheQueryIndexDisabledSelfTest.java    |   13 +-
 .../GridCacheQuerySerializationSelfTest.java    |    7 +-
 .../cache/GridCacheQuerySimpleBenchmark.java    |    7 +-
 .../cache/GridIndexingWithNoopSwapSelfTest.java |    7 +-
 .../IgniteBinaryObjectFieldsQuerySelfTest.java  |   12 +
 .../IgniteBinaryObjectQueryArgumentsTest.java   |   13 +
 ...eBinaryWrappedObjectFieldsQuerySelfTest.java |    2 +-
 .../IgniteCacheAbstractFieldsQuerySelfTest.java |   31 +-
 .../cache/IgniteCacheAbstractQuerySelfTest.java |  107 +-
 .../IgniteCacheCollocatedQuerySelfTest.java     |    6 +
 .../IgniteCacheConfigVariationsQueryTest.java   |   14 +-
 ...acheConfigurationPrimitiveTypesSelfTest.java |    8 +-
 .../IgniteCacheCrossCacheJoinRandomTest.java    |    8 +
 .../IgniteCacheDeleteSqlQuerySelfTest.java      |    7 +
 ...acheDistributedJoinCollocatedAndNotTest.java |    7 +
 ...acheDistributedJoinCustomAffinityMapper.java |    5 +
 .../IgniteCacheDistributedJoinNoIndexTest.java  |    5 +
 ...ributedJoinPartitionedAndReplicatedTest.java |    7 +
 ...CacheDistributedJoinQueryConditionsTest.java |    9 +
 .../cache/IgniteCacheDistributedJoinTest.java   |    5 +
 ...cheDuplicateEntityConfigurationSelfTest.java |    6 +
 .../IgniteCacheFieldsQueryNoDataSelfTest.java   |    7 +-
 ...teCacheFullTextQueryNodeJoiningSelfTest.java |    7 +-
 .../cache/IgniteCacheGroupsSqlTest.java         |   11 +
 .../IgniteCacheInsertSqlQuerySelfTest.java      |   16 +-
 ...PartitionedAndReplicatedCollocationTest.java |    5 +
 ...teCacheJoinPartitionedAndReplicatedTest.java |    6 +
 ...IgniteCacheJoinQueryWithAffinityKeyTest.java |   10 +
 .../cache/IgniteCacheLargeResultSelfTest.java   |    7 +-
 ...PartitionOnAffinityRunAtomicCacheOpTest.java |    7 +
 ...niteCacheLockPartitionOnAffinityRunTest.java |   15 +
 ...titionOnAffinityRunWithCollisionSpiTest.java |    6 +
 .../cache/IgniteCacheMergeSqlQuerySelfTest.java |   11 +
 .../IgniteCacheMultipleIndexedTypesTest.java    |    5 +
 .../cache/IgniteCacheNoClassQuerySelfTest.java  |    7 +-
 .../IgniteCacheObjectKeyIndexingSelfTest.java   |    9 +-
 .../cache/IgniteCacheOffheapEvictQueryTest.java |    5 +
 .../cache/IgniteCacheOffheapIndexScanTest.java  |    7 +-
 ...niteCacheP2pUnmarshallingQueryErrorTest.java |    6 +
 ...hePartitionedQueryMultiThreadedSelfTest.java |    7 +-
 ...IgniteCachePrimitiveFieldsQuerySelfTest.java |    7 +-
 .../cache/IgniteCacheQueriesLoadTest1.java      |    5 +
 .../IgniteCacheQueryH2IndexingLeakTest.java     |   19 +-
 .../cache/IgniteCacheQueryIndexSelfTest.java    |    8 +-
 .../cache/IgniteCacheQueryLoadSelfTest.java     |   12 +-
 .../IgniteCacheQueryMultiThreadedSelfTest.java  |   19 +-
 .../cache/IgniteCacheSqlQueryErrorSelfTest.java |   13 +
 ...gniteCacheSqlQueryMultiThreadedSelfTest.java |    8 +-
 .../IgniteCacheStarvationOnRebalanceTest.java   |   12 +-
 .../cache/IgniteCacheUnionDuplicatesTest.java   |    6 +-
 .../IgniteCacheUpdateSqlQuerySelfTest.java      |   10 +
 ...CheckClusterStateBeforeExecuteQueryTest.java |    5 +
 ...ClientReconnectCacheQueriesFailoverTest.java |    8 +-
 .../cache/IgniteClientReconnectQueriesTest.java |   11 +-
 .../cache/IgniteCrossCachesJoinsQueryTest.java  |   11 +-
 .../cache/IgniteDynamicSqlRestoreTest.java      |  193 +-
 .../cache/IgniteErrorOnRebalanceTest.java       |    9 +
 .../cache/IncorrectQueryEntityTest.java         |    5 +
 ...ndexingCachePartitionLossPolicySelfTest.java |   89 +-
 .../cache/QueryEntityCaseMismatchTest.java      |    6 +-
 .../QueryJoinWithDifferentNodeFiltersTest.java  |    7 +-
 .../cache/SqlFieldsQuerySelfTest.java           |    7 +
 .../cache/StartCachesInParallelTest.java        |  155 +
 .../authentication/SqlUserCommandSelfTest.java  |   11 +
 .../CacheBlockOnCreateDestoryIndexTest.java     |   36 +
 .../distributed/CacheBlockOnSqlQueryTest.java   |   14 +
 ...lientQueryReplicatedNodeRestartSelfTest.java |    7 +-
 ...utedPartitionQueryConfigurationSelfTest.java |    7 +-
 ...butedPartitionQueryNodeRestartsSelfTest.java |    7 +-
 ...eCacheDistributedPartitionQuerySelfTest.java |   13 +-
 ...niteCacheDistributedQueryCancelSelfTest.java |    6 +
 ...butedQueryStopOnCancelOrTimeoutSelfTest.java |   20 +-
 ...niteCachePartitionedFieldsQuerySelfTest.java |    8 +-
 .../IgniteCachePartitionedQuerySelfTest.java    |    2 +-
 .../IgniteCacheQueryNoRebalanceSelfTest.java    |    5 +
 .../near/IgniteCacheQueryNodeFailTest.java      |    6 +
 ...QueryNodeRestartDistributedJoinSelfTest.java |    8 +-
 .../IgniteCacheQueryNodeRestartSelfTest.java    |    7 +-
 .../IgniteCacheQueryNodeRestartSelfTest2.java   |    5 +
 ...nCancelOrTimeoutDistributedJoinSelfTest.java |   13 +-
 .../near/IgniteSqlQueryWithBaselineTest.java    |    9 +-
 ...ldsQueryJoinNoPrimaryPartitionsSelfTest.java |    7 +-
 ...gniteCacheReplicatedFieldsQuerySelfTest.java |    7 +-
 .../IgniteCacheReplicatedQuerySelfTest.java     |   24 +-
 .../cache/index/BasicIndexMultinodeTest.java    |   28 +
 .../processors/cache/index/BasicIndexTest.java  |  357 +-
 .../index/ComplexPrimaryKeyUnwrapSelfTest.java  |  348 ++
 .../ComplexSecondaryKeyUnwrapSelfTest.java      |  255 ++
 .../index/DuplicateKeyValueClassesSelfTest.java |    6 +
 ...ynamicColumnsAbstractConcurrentSelfTest.java |   21 +-
 .../cache/index/DynamicColumnsAbstractTest.java |    2 -
 .../DynamicIndexAbstractBasicSelfTest.java      |   75 +-
 .../DynamicIndexAbstractConcurrentSelfTest.java |   19 +-
 .../index/DynamicIndexAbstractSelfTest.java     |    2 +-
 .../cache/index/H2ConnectionLeaksSelfTest.java  |   10 +-
 .../H2DynamicColumnsAbstractBasicSelfTest.java  |   37 +-
 .../index/H2DynamicIndexAbstractSelfTest.java   |   11 +
 .../H2DynamicIndexingComplexAbstractTest.java   |    6 +-
 .../cache/index/H2DynamicTableSelfTest.java     |  127 +-
 .../cache/index/H2RowCachePageEvictionTest.java |    8 +
 .../cache/index/H2RowCacheSelfTest.java         |   12 +
 .../cache/index/IgniteDecimalSelfTest.java      |   16 +-
 .../index/IoStatisticsBasicIndexSelfTest.java   |  500 +++
 .../cache/index/LongIndexNameTest.java          |    5 +
 .../index/MvccEmptyTransactionSelfTest.java     |    5 +
 .../index/OptimizedMarshallerIndexNameTest.java |    5 +
 .../index/QueryEntityValidationSelfTest.java    |    8 +-
 .../cache/index/SchemaExchangeSelfTest.java     |  165 +-
 ...sactionCommandsWithMvccDisabledSelfTest.java |    7 +
 ...sactionsCommandsWithMvccEnabledSelfTest.java |   11 +-
 .../cache/index/SqlTransactionsSelfTest.java    |   13 +-
 .../IgniteCacheLocalFieldsQuerySelfTest.java    |    7 +-
 ...eCacheLocalQueryCancelOrTimeoutSelfTest.java |    9 +-
 .../local/IgniteCacheLocalQuerySelfTest.java    |    7 +
 ...acheMvccAbstractContinuousQuerySelfTest.java |   16 +-
 ...eMvccAbstractSqlCoordinatorFailoverTest.java |  180 +-
 .../mvcc/CacheMvccBackupsAbstractTest.java      |   19 +
 .../mvcc/CacheMvccBasicContinuousQueryTest.java |  373 ++
 .../cache/mvcc/CacheMvccBulkLoadTest.java       |    7 +
 ...ContinuousWithTransformerClientSelfTest.java |    5 +
 ...nuousWithTransformerPartitionedSelfTest.java |    5 +
 ...inuousWithTransformerReplicatedSelfTest.java |    5 +
 .../cache/mvcc/CacheMvccDmlSimpleTest.java      |    8 +
 ...MvccPartitionedSelectForUpdateQueryTest.java |    8 +-
 ...ccPartitionedSqlCoordinatorFailoverTest.java |   71 +-
 ...cPartitionedSqlTxQueriesWithReducerTest.java |    7 +-
 .../CacheMvccReplicatedSqlTxQueriesTest.java    |    9 +-
 ...cheMvccSelectForUpdateQueryAbstractTest.java |   15 +-
 .../cache/mvcc/CacheMvccSizeTest.java           |   11 +
 ...CacheMvccSqlConfigurationValidationTest.java |    7 +
 .../cache/mvcc/CacheMvccSqlLockTimeoutTest.java |   10 +
 .../mvcc/CacheMvccSqlQueriesAbstractTest.java   |   31 +
 .../mvcc/CacheMvccSqlTxQueriesAbstractTest.java |   62 +-
 ...MvccSqlTxQueriesWithReducerAbstractTest.java |   20 +
 .../mvcc/CacheMvccSqlUpdateCountersTest.java    |    9 +
 .../mvcc/CacheMvccStreamingInsertTest.java      |    6 +
 .../cache/mvcc/CacheMvccTxNodeMappingTest.java  |    6 +
 .../cache/mvcc/CacheMvccTxRecoveryTest.java     |   15 +
 .../mvcc/MvccRepeatableReadBulkOpsTest.java     |   16 +
 .../mvcc/MvccRepeatableReadOperationsTest.java  |    9 +-
 .../db/wal/IgniteWalRecoveryTest.java           | 1157 +++---
 .../transaction/DmlInsideTransactionTest.java   |  247 ++
 .../cache/ttl/CacheTtlAbstractSelfTest.java     |   13 +-
 ...onnectorConfigurationValidationSelfTest.java |   25 +-
 .../client/IgniteDataStreamerTest.java          |    5 +
 ...gniteDbSingleNodeWithIndexingPutGetTest.java |    6 +
 ...eDbSingleNodeWithIndexingWalRestoreTest.java |    6 +
 ...oreQueryWithMultipleClassesPerCacheTest.java |    7 +-
 .../IgnitePersistentStoreSchemaLoadTest.java    |    8 +-
 .../IgniteTwoRegionsRebuildIndexTest.java       |    5 +
 ...iteCacheGroupsSqlSegmentedIndexSelfTest.java |    5 +
 .../query/IgniteCachelessQueriesSelfTest.java   |   26 +-
 .../query/IgniteQueryDedicatedPoolTest.java     |    7 +
 .../query/IgniteSqlDefaultValueTest.java        |    9 +
 .../query/IgniteSqlDistributedJoinSelfTest.java |    5 +
 .../IgniteSqlEntryCacheModeAgnosticTest.java    |    5 +
 .../IgniteSqlGroupConcatCollocatedTest.java     |    7 +
 .../IgniteSqlGroupConcatNotCollocatedTest.java  |    7 +
 .../query/IgniteSqlKeyValueFieldsTest.java      |  795 ++--
 .../query/IgniteSqlNotNullConstraintTest.java   |   46 +
 .../query/IgniteSqlParameterizedQueryTest.java  |    5 +
 .../query/IgniteSqlQueryParallelismTest.java    |    8 +-
 .../processors/query/IgniteSqlRoutingTest.java  |   18 +
 .../query/IgniteSqlSchemaIndexingTest.java      |   18 +-
 .../query/IgniteSqlSegmentedIndexSelfTest.java  |   10 +
 ...teSqlSkipReducerOnUpdateDmlFlagSelfTest.java |   24 +
 ...IgniteSqlSkipReducerOnUpdateDmlSelfTest.java |   15 +-
 .../query/IgniteSqlSplitterSelfTest.java        |   52 +-
 .../processors/query/LazyQuerySelfTest.java     |    9 +-
 .../MultipleStatementsSqlQuerySelfTest.java     |    8 +
 .../processors/query/RunningQueriesTest.java    |   98 +
 .../query/SqlIllegalSchemaSelfTest.java         |  188 +-
 .../query/SqlNestedQuerySelfTest.java           |   80 +
 .../query/SqlPushDownFunctionTest.java          |    5 +
 .../processors/query/SqlSchemaSelfTest.java     |   37 +-
 .../query/SqlSystemViewsSelfTest.java           |   12 +-
 .../query/h2/GridIndexRebuildSelfTest.java      |   16 +-
 ...GridIndexRebuildWithMvccEnabledSelfTest.java |    5 +
 .../h2/GridIndexingSpiAbstractSelfTest.java     |  644 +---
 ...H2ResultSetIteratorNullifyOnEndSelfTest.java |  194 +-
 .../query/h2/H2StatementCacheSelfTest.java      |    9 +-
 .../query/h2/IgniteSqlBigIntegerKeyTest.java    |    7 +
 .../query/h2/IgniteSqlQueryMinMaxTest.java      |   13 +
 .../query/h2/PreparedStatementExSelfTest.java   |    8 +-
 .../query/h2/ThreadLocalObjectPoolSelfTest.java |    9 +
 .../h2/database/InlineIndexHelperTest.java      |   30 +
 .../h2/sql/AbstractH2CompareQueryTest.java      |    2 -
 .../query/h2/sql/BaseH2CompareQueryTest.java    |   21 +-
 .../query/h2/sql/ExplainSelfTest.java           |  160 +
 .../query/h2/sql/GridQueryParsingTest.java      |   37 +-
 .../query/h2/sql/H2CompareBigQueryTest.java     |    7 +-
 .../AndOperationExtractPartitionSelfTest.java   |  261 ++
 .../h2/twostep/CacheQueryMemoryLeakTest.java    |    5 +
 .../twostep/CreateTableWithDateKeySelfTest.java |    7 +
 ...sappearedCacheCauseRetryMessageSelfTest.java |   11 +-
 ...appearedCacheWasNotFoundMessageSelfTest.java |   17 +-
 .../InOperationExtractPartitionSelfTest.java    |   13 +-
 .../query/h2/twostep/JoinSqlTestHelper.java     |   72 +-
 .../NonCollocatedRetryMessageSelfTest.java      |    9 +-
 .../h2/twostep/RetryCauseMessageSelfTest.java   |   18 +-
 .../h2/twostep/TableViewSubquerySelfTest.java   |    5 +
 ...ePartitionedAtomicColumnConstraintsTest.java |  438 ++-
 ...ionedTransactionalColumnConstraintsTest.java |    4 +-
 ...ansactionalSnapshotColumnConstraintTest.java |  142 +
 ...ansactionalSnapshotColumnConstraintTest.java |  142 +
 .../sql/IgniteSQLColumnConstraintsTest.java     |  307 +-
 ...gniteTransactionSQLColumnConstraintTest.java |   77 +
 ...onnectorConfigurationValidationSelfTest.java |   13 +-
 .../FetchingQueryCursorStressTest.java          |    2 -
 .../tcp/GridOrderedMessageCancelSelfTest.java   |    8 +-
 .../org/apache/ignite/sqltests/BaseSqlTest.java |   24 +-
 .../ignite/sqltests/PartitionedSqlTest.java     |   10 +
 .../ignite/sqltests/ReplicatedSqlTest.java      |   19 +
 .../IgniteBinaryCacheQueryTestSuite.java        |  509 ++-
 .../IgniteBinaryCacheQueryTestSuite2.java       |  107 +-
 .../IgniteCacheAffinityRunTestSuite.java        |   18 +-
 ...ockExchangeOnSqlReadOperationsTestSuite.java |    5 +-
 .../testsuites/IgniteCacheMvccSqlTestSuite.java |  101 +-
 .../IgniteCacheQuerySelfTestSuite.java          |  495 ---
 .../IgniteCacheQuerySelfTestSuite2.java         |  130 -
 .../IgniteCacheQuerySelfTestSuite3.java         |  146 +-
 .../IgniteCacheQuerySelfTestSuite4.java         |   24 +-
 .../IgniteCacheQuerySelfTestSuite5.java         |   73 +
 .../IgniteCacheQuerySelfTestSuite6.java         |   73 +
 ...acheWithIndexingAndPersistenceTestSuite.java |    8 +-
 .../IgniteCacheWithIndexingTestSuite.java       |   55 +-
 ...IgniteDbMemoryLeakWithIndexingTestSuite.java |    8 +-
 .../IgnitePdsWithIndexingCoreTestSuite.java     |   57 +-
 .../IgnitePdsWithIndexingTestSuite.java         |   20 +-
 .../util/GridCommandHandlerIndexingTest.java    |   13 +-
 ...ityWithJsr310Java8DateTimeApiFieldsTest.java |   12 +
 ...yJsr310Java8DateTimeApiSupportTestSuite.java |    3 +-
 .../apache/ignite/logger/jcl/JclLoggerTest.java |    7 +-
 .../ignite/testsuites/IgniteJclTestSuite.java   |    8 +-
 .../stream/jms11/IgniteJmsStreamerTest.java     |   26 +-
 .../cache/jta/websphere/WebSphereTmFactory.java |    1 -
 .../cache/CacheJndiTmFactorySelfTest.java       |    6 +
 ...CacheJtaConfigurationValidationSelfTest.java |    5 +
 ...CacheJtaFactoryConfigValidationSelfTest.java |    7 +
 .../cache/GridJtaLifecycleAwareSelfTest.java    |    8 +
 .../GridJtaTransactionManagerSelfTest.java      |    6 +
 .../cache/jta/AbstractCacheJtaSelfTest.java     |    1 -
 ...titionedCacheJtaLookupClassNameSelfTest.java |    2 +-
 .../ignite/testsuites/IgniteJtaTestSuite.java   |   18 +-
 modules/kafka/pom.xml                           |    1 +
 .../kafka/IgniteKafkaStreamerSelfTestSuite.java |   10 +-
 .../kafka/KafkaIgniteStreamerSelfTest.java      |    5 +
 .../kafka/connect/IgniteSinkConnectorTest.java  |   10 +-
 .../connect/IgniteSourceConnectorTest.java      |    7 +-
 modules/kubernetes/pom.xml                      |    6 +
 .../TcpDiscoveryKubernetesIpFinderSelfTest.java |    7 +-
 .../testsuites/IgniteKubernetesTestSuite.java   |    8 +-
 .../logger/log4j/GridLog4jConfigUpdateTest.java |   12 +-
 .../log4j/GridLog4jCorrectFileNameTest.java     |   24 +-
 .../logger/log4j/GridLog4jInitializedTest.java  |    7 +-
 .../logger/log4j/GridLog4jLoggingFileTest.java  |   17 +-
 .../logger/log4j/GridLog4jLoggingPathTest.java  |   17 +-
 .../logger/log4j/GridLog4jLoggingUrlTest.java   |   17 +-
 .../log4j/GridLog4jNotInitializedTest.java      |    7 +-
 .../logger/log4j2/Log4j2ConfigUpdateTest.java   |   10 +-
 .../logger/log4j2/Log4j2LoggerMarkerTest.java   |   24 +-
 .../logger/log4j2/Log4j2LoggerSelfTest.java     |   26 +-
 .../log4j2/Log4j2LoggerVerboseModeSelfTest.java |   11 +-
 .../testsuites/IgniteLog4j2TestSuite.java       |   14 +-
 modules/mesos/pom.xml                           |   48 -
 .../ignite/mesos/resource/IgniteProvider.java   |    1 -
 .../org/apache/ignite/IgniteMesosTestSuite.java |    8 +-
 modules/ml/pom.xml                              |   13 +
 .../main/java/org/apache/ignite/ml/Model.java   |   11 +
 .../ml/clustering/kmeans/KMeansTrainer.java     |    9 +-
 .../ml/composition/BaggingModelTrainer.java     |  200 -
 .../boosting/GDBBinaryClassifierTrainer.java    |   12 +-
 .../boosting/GDBLearningStrategy.java           |   21 +-
 .../boosting/GDBRegressionTrainer.java          |    6 +
 .../ml/composition/boosting/GDBTrainer.java     |   20 +-
 .../convergence/ConvergenceChecker.java         |   10 +-
 .../mean/MeanAbsValueConvergenceChecker.java    |    2 +-
 .../simple/ConvergenceCheckerStub.java          |    5 +-
 .../stacking/SimpleStackedDatasetTrainer.java   |  125 +
 .../stacking/StackedDatasetTrainer.java         |  412 +++
 .../ml/composition/stacking/StackedModel.java   |  106 +
 .../stacking/StackedVectorDatasetTrainer.java   |  151 +
 .../ml/composition/stacking/package-info.java   |   22 +
 .../org/apache/ignite/ml/dataset/Dataset.java   |   61 +-
 .../ignite/ml/dataset/DatasetBuilder.java       |   22 +-
 .../ignite/ml/dataset/DatasetFactory.java       |  184 +-
 .../ml/dataset/PartitionContextBuilder.java     |   28 +-
 .../ignite/ml/dataset/PartitionDataBuilder.java |   31 +-
 .../ignite/ml/dataset/UpstreamTransformer.java  |   50 +
 .../ml/dataset/UpstreamTransformerBuilder.java  |   72 +
 .../BootstrappedDatasetBuilder.java             |   15 +-
 .../dataset/impl/cache/CacheBasedDataset.java   |   48 +-
 .../impl/cache/CacheBasedDatasetBuilder.java    |   33 +-
 .../dataset/impl/cache/util/ComputeUtils.java   |  133 +-
 .../ml/dataset/impl/local/LocalDataset.java     |   20 +-
 .../dataset/impl/local/LocalDatasetBuilder.java |   91 +-
 .../ml/dataset/primitive/DatasetWrapper.java    |    5 +-
 ...eatureMatrixWithLabelsOnHeapDataBuilder.java |    7 +-
 .../builder/context/EmptyContextBuilder.java    |    3 +-
 .../builder/data/SimpleDatasetDataBuilder.java  |    5 +-
 .../data/SimpleLabeledDatasetDataBuilder.java   |    5 +-
 .../DefaultLearningEnvironmentBuilder.java      |  178 +
 .../ml/environment/LearningEnvironment.java     |   19 +-
 .../environment/LearningEnvironmentBuilder.java |  167 +-
 .../ml/environment/logging/ConsoleLogger.java   |    3 +
 .../parallelism/DefaultParallelismStrategy.java |    1 +
 .../parallelism/ParallelismStrategy.java        |    1 -
 .../apache/ignite/ml/inference/InfModel.java    |   37 +
 .../ignite/ml/inference/ModelDescriptor.java    |   94 +
 .../ignite/ml/inference/ModelSignature.java     |   62 +
 .../inference/builder/AsyncInfModelBuilder.java |   43 +
 .../IgniteDistributedInfModelBuilder.java       |  368 ++
 .../builder/SingleInfModelBuilder.java          |   34 +
 .../inference/builder/SyncInfModelBuilder.java  |   42 +
 .../builder/ThreadedInfModelBuilder.java        |   86 +
 .../ml/inference/builder/package-info.java      |   22 +
 .../ignite/ml/inference/package-info.java       |   22 +
 .../parser/IgniteFunctionInfModelParser.java    |   76 +
 .../ml/inference/parser/InfModelParser.java     |   38 +
 .../parser/TensorFlowBaseInfModelParser.java    |  216 ++
 .../parser/TensorFlowGraphInfModelParser.java   |   40 +
 .../TensorFlowSavedModelInfModelParser.java     |   70 +
 .../ml/inference/parser/package-info.java       |   22 +
 .../reader/FileSystemInfModelReader.java        |   61 +
 .../reader/InMemoryInfModelReader.java          |   67 +
 .../ml/inference/reader/InfModelReader.java     |   33 +
 .../reader/ModelStorageInfModelReader.java      |   64 +
 .../ml/inference/reader/package-info.java       |   22 +
 .../IgniteModelDescriptorStorage.java           |   66 +
 .../descriptor/LocalModelDescriptorStorage.java |   52 +
 .../descriptor/ModelDescriptorStorage.java      |   58 +
 .../ModelDescriptorStorageFactory.java          |   43 +
 .../storage/descriptor/package-info.java        |   22 +
 .../storage/model/DefaultModelStorage.java      |  313 ++
 .../ml/inference/storage/model/Directory.java   |   42 +
 .../ignite/ml/inference/storage/model/File.java |   48 +
 .../storage/model/FileOrDirectory.java          |   41 +
 .../model/IgniteModelStorageProvider.java       |   58 +
 .../model/LocalModelStorageProvider.java        |   56 +
 .../inference/storage/model/ModelStorage.java   |  115 +
 .../storage/model/ModelStorageFactory.java      |   42 +
 .../storage/model/ModelStorageProvider.java     |   56 +
 .../inference/storage/model/package-info.java   |   22 +
 .../ml/inference/storage/package-info.java      |   22 +
 .../ml/inference/util/DirectorySerializer.java  |  133 +
 .../ignite/ml/inference/util/package-info.java  |   22 +
 .../java/org/apache/ignite/ml/knn/KNNUtils.java |    9 +-
 .../ml/knn/ann/ANNClassificationTrainer.java    |   10 +-
 .../KNNClassificationTrainer.java               |   10 +-
 .../ml/knn/regression/KNNRegressionTrainer.java |    9 +-
 .../exceptions/preprocessing/package-info.java  |   22 +
 .../ml/math/functions/IgniteFunction.java       |   21 +
 .../ignite/ml/math/isolve/lsqr/LSQROnHeap.java  |    6 +-
 .../primitives/matrix/impl/DenseMatrix.java     |    2 +-
 .../ml/math/primitives/vector/VectorUtils.java  |   83 +-
 .../vector/storage/DenseVectorStorage.java      |    2 +-
 .../ignite/ml/multiclass/MultiClassModel.java   |  115 +
 .../ignite/ml/multiclass/OneVsRestTrainer.java  |  148 +
 .../ignite/ml/multiclass/package-info.java      |   22 +
 .../discrete/DiscreteNaiveBayesModel.java       |  127 +
 .../discrete/DiscreteNaiveBayesSumsHolder.java  |   54 +
 .../discrete/DiscreteNaiveBayesTrainer.java     |  233 ++
 .../ml/naivebayes/discrete/package-info.java    |   22 +
 .../gaussian/GaussianNaiveBayesModel.java       |    8 +-
 .../gaussian/GaussianNaiveBayesSumsHolder.java  |    6 +-
 .../gaussian/GaussianNaiveBayesTrainer.java     |   33 +-
 .../org/apache/ignite/ml/nn/MLPTrainer.java     |    1 +
 .../org/apache/ignite/ml/pipeline/Pipeline.java |   16 +-
 .../ml/preprocessing/PreprocessingTrainer.java  |   66 +-
 .../binarization/BinarizationTrainer.java       |    5 +-
 .../encoding/EncoderSortingStrategy.java        |   31 +
 .../preprocessing/encoding/EncoderTrainer.java  |   37 +-
 .../preprocessing/imputing/ImputerTrainer.java  |   10 +-
 .../maxabsscaling/MaxAbsScalerTrainer.java      |   10 +-
 .../minmaxscaling/MinMaxScalerTrainer.java      |   12 +-
 .../normalization/NormalizationTrainer.java     |    5 +-
 .../standardscaling/StandardScalerData.java     |   56 +
 .../StandardScalerPreprocessor.java             |   91 +
 .../standardscaling/StandardScalerTrainer.java  |  105 +
 .../standardscaling/package-info.java           |   22 +
 .../linear/LinearRegressionLSQRTrainer.java     |    3 +-
 .../logistic/LogisticRegressionModel.java       |  205 ++
 .../logistic/LogisticRegressionSGDTrainer.java  |  245 ++
 .../binomial/LogisticRegressionModel.java       |  205 --
 .../binomial/LogisticRegressionSGDTrainer.java  |  247 --
 .../logistic/binomial/package-info.java         |   22 -
 .../LogRegressionMultiClassModel.java           |  115 -
 .../LogRegressionMultiClassTrainer.java         |  268 --
 .../logistic/multiclass/package-info.java       |   22 -
 .../ml/selection/cv/CrossValidationResult.java  |    4 +-
 .../cursor/CacheBasedLabelPairCursor.java       |    6 +-
 .../BinaryClassificationEvaluator.java          |  184 +
 .../selection/scoring/evaluator/Evaluator.java  |  104 -
 .../scoring/evaluator/package-info.java         |   22 +
 .../ml/selection/scoring/metric/Accuracy.java   |    5 +
 .../BinaryClassificationMetricValues.java       |  185 +
 .../metric/BinaryClassificationMetrics.java     |   86 +
 .../selection/scoring/metric/ClassMetric.java   |   37 +
 .../ml/selection/scoring/metric/Fmeasure.java   |   22 +-
 .../ml/selection/scoring/metric/Metric.java     |    9 +
 .../ml/selection/scoring/metric/Precision.java  |   23 +-
 .../ml/selection/scoring/metric/Recall.java     |   22 +-
 .../metric/UnknownClassLabelException.java      |   38 +
 .../LabelPartitionDataBuilderOnHeap.java        |    8 +-
 ...abeledDatasetPartitionDataBuilderOnHeap.java |    7 +-
 .../svm/SVMLinearBinaryClassificationModel.java |  194 -
 .../SVMLinearBinaryClassificationTrainer.java   |  355 --
 .../ml/svm/SVMLinearClassificationModel.java    |  194 +
 .../ml/svm/SVMLinearClassificationTrainer.java  |  356 ++
 .../SVMLinearMultiClassClassificationModel.java |  114 -
 ...VMLinearMultiClassClassificationTrainer.java |  268 --
 .../ml/trainers/AdaptableDatasetModel.java      |   98 +
 .../ml/trainers/AdaptableDatasetTrainer.java    |  120 +
 .../ignite/ml/trainers/DatasetTrainer.java      |   62 +-
 .../ignite/ml/trainers/TrainerTransformers.java |  320 ++
 .../BaggingUpstreamTransformer.java             |   79 +
 .../ml/trainers/transformers/package-info.java  |   22 +
 .../org/apache/ignite/ml/tree/DecisionTree.java |   11 +-
 .../tree/DecisionTreeClassificationTrainer.java |    6 +
 .../ml/tree/DecisionTreeRegressionTrainer.java  |    6 +
 .../GDBBinaryClassifierOnTreesTrainer.java      |    6 +
 .../boosting/GDBOnTreesLearningStrategy.java    |    3 +-
 .../boosting/GDBRegressionOnTreesTrainer.java   |    6 +
 .../ml/tree/data/DecisionTreeDataBuilder.java   |    7 +-
 .../impurity/ImpurityMeasureCalculator.java     |    9 +
 .../RandomForestClassifierTrainer.java          |    6 +
 .../tree/randomforest/RandomForestTrainer.java  |    1 +
 .../impurity/ImpurityHistogramsComputer.java    |    2 +-
 .../ignite/ml/util/MLSandboxDatasets.java       |   90 +
 .../org/apache/ignite/ml/util/MnistUtils.java   |   79 +-
 .../apache/ignite/ml/util/SandboxMLCache.java   |  133 +
 .../java/org/apache/ignite/ml/util/Utils.java   |   32 +
 .../apache/ignite/ml/util/plugin/MLPlugin.java  |   30 +
 .../ml/util/plugin/MLPluginConfiguration.java   |   77 +
 .../ignite/ml/util/plugin/MLPluginProvider.java |  195 +
 .../org.apache.ignite.plugin.PluginProvider     |    1 +
 .../datasets/boston_housing_dataset.txt         |  505 +++
 .../resources/datasets/cleared_machines.csv     |  209 ++
 .../english_vs_scottish_binary_dataset.csv      |   14 +
 .../resources/datasets/glass_identification.csv |  116 +
 modules/ml/src/main/resources/datasets/iris.txt |  150 +
 .../main/resources/datasets/mortalitydata.csv   |   53 +
 .../ml/src/main/resources/datasets/titanic.csv  | 1310 +++++++
 .../resources/datasets/two_classed_iris.csv     |  100 +
 modules/ml/src/main/resources/datasets/wine.txt |  178 +
 .../org/apache/ignite/ml/IgniteMLTestSuite.java |   55 +-
 .../java/org/apache/ignite/ml/TestUtils.java    |  117 +-
 .../ignite/ml/common/CollectionsTest.java       |   19 +-
 .../ignite/ml/common/LocalModelsTest.java       |   54 +-
 .../apache/ignite/ml/common/TrainerTest.java    |   29 +
 .../ignite/ml/composition/BaggingTest.java      |  217 ++
 .../ml/composition/CompositionTestSuite.java    |    4 +-
 .../ignite/ml/composition/StackingTest.java     |  172 +
 .../MeanAbsValueConvergenceCheckerTest.java     |   10 +-
 .../MedianOfMedianConvergenceCheckerTest.java   |   10 +-
 .../OnMajorityPredictionsAggregatorTest.java    |    3 +
 .../ignite/ml/dataset/DatasetTestSuite.java     |   40 +-
 .../cache/CacheBasedDatasetBuilderTest.java     |   11 +-
 .../impl/cache/CacheBasedDatasetTest.java       |   11 +-
 .../impl/cache/util/ComputeUtilsTest.java       |   17 +-
 .../impl/local/LocalDatasetBuilderTest.java     |   14 +-
 .../ml/dataset/primitive/SimpleDatasetTest.java |    2 +
 .../primitive/SimpleLabeledDatasetTest.java     |   11 +-
 .../LearningEnvironmentBuilderTest.java         |   36 +-
 .../ml/environment/LearningEnvironmentTest.java |  130 +-
 .../ignite/ml/inference/InferenceTestSuite.java |   50 +
 .../IgniteDistributedInfModelBuilderTest.java   |   70 +
 .../builder/InfModelBuilderTestUtil.java        |   53 +
 .../builder/SingleInfModelBuilderTest.java      |   42 +
 .../builder/ThreadedInfModelBuilderTest.java    |   44 +
 .../storage/model/AbstractModelStorageTest.java |  142 +
 .../storage/model/DefaultModelStorageTest.java  |  143 +
 .../inference/util/DirectorySerializerTest.java |  126 +
 .../ignite/ml/knn/LabeledVectorSetTest.java     |    1 +
 .../ml/math/isolve/lsqr/LSQROnHeapTest.java     |    4 +
 .../matrix/SparseMatrixConstructorTest.java     |    1 -
 .../primitives/vector/AbstractVectorTest.java   |    5 +-
 .../primitives/vector/MatrixVectorViewTest.java |   10 -
 .../primitives/vector/VectorAttributesTest.java |    2 +-
 .../primitives/vector/VectorFoldMapTest.java    |    2 +-
 .../vector/VectorImplementationsTest.java       |    8 +-
 .../ml/multiclass/MultiClassTestSuite.java      |   32 +
 .../ml/multiclass/OneVsRestTrainerTest.java     |  126 +
 .../discrete/DiscreteNaiveBayesModelTest.java   |   45 +
 .../discrete/DiscreteNaiveBayesTest.java        |   67 +
 .../discrete/DiscreteNaiveBayesTrainerTest.java |  185 +
 .../gaussian/GaussianNaiveBayesModelTest.java   |    1 -
 .../gaussian/GaussianNaiveBayesTrainerTest.java |    1 +
 .../org/apache/ignite/ml/nn/MLPTestSuite.java   |   27 +-
 .../ignite/ml/nn/MLPTrainerIntegrationTest.java |    2 +-
 .../MLPTrainerMnistIntegrationTest.java         |    4 +-
 .../ml/nn/performance/MLPTrainerMnistTest.java  |    2 +-
 .../ignite/ml/pipeline/PipelineMdlTest.java     |    2 +-
 .../apache/ignite/ml/pipeline/PipelineTest.java |    4 +-
 .../binarization/BinarizationTrainerTest.java   |    3 +
 .../encoding/EncoderTrainerTest.java            |   32 +
 .../imputing/ImputerTrainerTest.java            |    2 +
 .../maxabsscaling/MaxAbsScalerTrainerTest.java  |    2 +
 .../minmaxscaling/MinMaxScalerTrainerTest.java  |    2 +
 .../normalization/NormalizationTrainerTest.java |    2 +
 .../StandardScalerPreprocessorTest.java         |   58 +
 .../StandardScalerTrainerTest.java              |   87 +
 .../ml/regressions/RegressionsTestSuite.java    |    4 +-
 .../linear/LinearRegressionLSQRTrainerTest.java |    6 +-
 .../linear/LinearRegressionModelTest.java       |   23 +-
 .../logistic/LogRegMultiClassTrainerTest.java   |  141 -
 .../logistic/LogisticRegressionModelTest.java   |    1 -
 .../LogisticRegressionSGDTrainerTest.java       |    8 +-
 .../ignite/ml/selection/SelectionTestSuite.java |   41 +-
 .../scoring/evaluator/EvaluatorTest.java        |   17 +-
 .../ignite/ml/svm/SVMBinaryTrainerTest.java     |   14 +-
 .../org/apache/ignite/ml/svm/SVMModelTest.java  |   36 +-
 .../ignite/ml/svm/SVMMultiClassTrainerTest.java |  100 -
 .../org/apache/ignite/ml/svm/SVMTestSuite.java  |    1 -
 ...reeClassificationTrainerIntegrationTest.java |    2 +-
 ...ionTreeRegressionTrainerIntegrationTest.java |    2 +-
 .../ignite/ml/tree/DecisionTreeTestSuite.java   |   40 +-
 .../DecisionTreeMNISTIntegrationTest.java       |    2 +-
 .../RandomForestClassifierTrainerTest.java      |    4 +-
 modules/ml/xgboost-model-parser/pom.xml         |   55 +
 .../ignite/ml/xgboost/MapBasedXGObject.java     |   61 +
 .../apache/ignite/ml/xgboost/XGLeafNode.java    |   38 +
 .../org/apache/ignite/ml/xgboost/XGModel.java   |   53 +
 .../org/apache/ignite/ml/xgboost/XGNode.java    |   29 +
 .../org/apache/ignite/ml/xgboost/XGObject.java  |   33 +
 .../apache/ignite/ml/xgboost/XGSplitNode.java   |   74 +
 .../apache/ignite/ml/xgboost/package-info.java  |   22 +
 .../xgboost/parser/XGBoostModelBaseVisitor.java |   78 +
 .../ml/xgboost/parser/XGBoostModelLexer.java    |  210 ++
 .../ml/xgboost/parser/XGBoostModelListener.java |   98 +
 .../ml/xgboost/parser/XGBoostModelParser.java   |  966 +++++
 .../ml/xgboost/parser/XGBoostModelVisitor.java  |   71 +
 .../ignite/ml/xgboost/parser/XGModelParser.java |   87 +
 .../ignite/ml/xgboost/parser/package-info.java  |   22 +
 .../xgboost/parser/visitor/XGModelVisitor.java  |   43 +
 .../xgboost/parser/visitor/XGTreeVisitor.java   |   82 +
 .../ml/xgboost/parser/visitor/package-info.java |   22 +
 .../ml/xgboost/IgniteMLXGBoostTestSuite.java    |   31 +
 .../xgboost/parser/XGBoostModelParserTest.java  |   85 +
 .../test/resources/datasets/agaricus-model.txt  |  714 ++++
 .../resources/datasets/agaricus-test-data.txt   | 1611 ++++++++
 .../datasets/agaricus-test-expected-results.txt | 1611 ++++++++
 .../stream/mqtt/IgniteMqttStreamerTest.java     |   23 +-
 .../include/ignite/binary/binary_object.h       |    1 +
 .../include/ignite/binary/binary_raw_reader.h   |   20 +
 .../include/ignite/binary/binary_raw_writer.h   |   38 +-
 .../include/ignite/binary/binary_reader.h       |   26 +-
 .../include/ignite/binary/binary_writer.h       |   42 +-
 .../cpp/common/include/ignite/common/utils.h    |   56 +
 .../cpp/odbc-test/src/meta_queries_test.cpp     |   43 +
 .../cpp/odbc-test/src/sql_get_info_test.cpp     |    2 +-
 modules/platforms/cpp/odbc/Makefile.am          |    3 +-
 modules/platforms/cpp/odbc/include/Makefile.am  |    2 +-
 .../cpp/odbc/include/ignite/odbc/ssl/ssl_api.h  |   32 +
 .../odbc/include/ignite/odbc/ssl/ssl_bindings.h |  357 --
 .../odbc/include/ignite/odbc/ssl/ssl_gateway.h  |  117 +-
 .../platforms/cpp/odbc/project/vs/odbc.vcxproj  |    3 +-
 .../cpp/odbc/project/vs/odbc.vcxproj.filters    |    9 +-
 .../cpp/odbc/src/config/connection_info.cpp     |    2 +-
 modules/platforms/cpp/odbc/src/connection.cpp   |    4 +-
 .../cpp/odbc/src/ssl/secure_socket_client.cpp   |  158 +-
 modules/platforms/cpp/odbc/src/ssl/ssl_api.cpp  |   33 +
 .../platforms/cpp/odbc/src/ssl/ssl_gateway.cpp  |  639 +++-
 .../thin-client-test/src/cache_client_test.cpp  |   27 +
 .../cpp/thin-client-test/src/ssl_test.cpp       |    2 +-
 modules/platforms/cpp/thin-client/Makefile.am   |    1 +
 .../cpp/thin-client/include/Makefile.am         |    3 +-
 .../thin-client/project/vs/thin-client.vcxproj  |    5 +-
 .../project/vs/thin-client.vcxproj.filters      |   11 +-
 .../cpp/thin-client/src/impl/data_channel.cpp   |    4 +-
 .../src/impl/ssl/secure_socket_client.cpp       |  139 +-
 .../cpp/thin-client/src/impl/ssl/ssl_api.cpp    |   36 +
 .../cpp/thin-client/src/impl/ssl/ssl_api.h      |   36 +
 .../cpp/thin-client/src/impl/ssl/ssl_bindings.h |  360 --
 .../thin-client/src/impl/ssl/ssl_gateway.cpp    |  632 +++-
 .../cpp/thin-client/src/impl/ssl/ssl_gateway.h  |  120 +
 .../Apache.Ignite.Core.Tests.DotNetCore.csproj  |    1 +
 .../Apache.Ignite.Core.Tests.csproj             |    2 +
 .../ApiParity/CacheConfigurationParityTest.cs   |    4 +-
 .../ApiParity/DataStorageMetricsParityTest.cs   |    5 +-
 .../ApiParity/IgniteConfigurationParityTest.cs  |    3 +-
 .../ApiParity/TcpCommunicationSpiParityTest.cs  |   84 +
 .../Cache/Query/CacheQueriesTest.cs             |    4 +
 .../Query/CacheQueriesWithRestartServerTest.cs  |  160 +
 .../Query/Linq/CacheLinqTest.Introspection.cs   |    4 +
 .../Cache/Query/Linq/CacheLinqTest.Misc.cs      |    3 +-
 .../FailureHandlerTest.cs                       |    2 +
 .../IgniteConfigurationTest.cs                  |   16 +-
 .../Apache.Ignite.Core.Tests/ReconnectTest.cs   |   70 +-
 .../Cache/Query/SqlFieldsQuery.cs               |    3 +
 .../Apache.Ignite.Core/Cache/Query/SqlQuery.cs  |    5 +
 .../Communication/Tcp/TcpCommunicationSpi.cs    |   99 +-
 .../Impl/Binary/BinaryFullTypeDescriptor.cs     |   11 +
 .../Impl/Binary/Marshaller.cs                   |   36 +-
 .../Binary/Structure/BinaryStructureTracker.cs  |    3 +-
 .../Apache.Ignite.Core/Impl/Cache/CacheImpl.cs  |    2 +
 .../Impl/Client/Cache/CacheClient.cs            |    4 +
 .../Common/CopyOnWriteConcurrentDictionary.cs   |   18 +-
 .../Impl/Common/DelegateConverter.cs            |    1 +
 .../Impl/Datastream/DataStreamerImpl.cs         |    1 +
 .../dotnet/Apache.Ignite.Core/Impl/Ignite.cs    |    2 +
 .../Impl/CacheFieldsQueryExecutor.cs            |    2 +
 .../dotnet/Apache.Ignite.Linq/QueryOptions.cs   |    1 +
 .../docs/source/pyignite.datatypes.base.rst     |    7 +
 .../python/docs/source/pyignite.datatypes.rst   |    1 +
 .../platforms/python/pyignite/datatypes/base.py |   24 +
 .../python/pyignite/datatypes/complex.py        |   23 +-
 .../python/pyignite/datatypes/internal.py       |   19 +-
 .../python/pyignite/datatypes/null_object.py    |    3 +-
 .../python/pyignite/datatypes/primitive.py      |    3 +-
 .../pyignite/datatypes/primitive_arrays.py      |    3 +-
 .../pyignite/datatypes/primitive_objects.py     |    3 +-
 .../python/pyignite/datatypes/standard.py       |    9 +-
 modules/platforms/python/pyignite/utils.py      |    6 +-
 modules/platforms/python/setup.py               |    2 +-
 .../platforms/python/tests/test_key_value.py    |   75 +-
 .../http/jetty/GridJettyRestHandler.java        |   17 +-
 .../http/jetty/GridJettyRestProtocol.java       |    2 -
 .../protocols/http/jetty/GridRestSuite.java     |    3 +-
 .../http/jetty/RestSetupSimpleTest.java         |    5 +
 .../stream/rocketmq/RocketMQStreamerTest.java   |    6 +-
 .../rocketmq/RocketMQStreamerTestSuite.java     |    6 +-
 .../schedule/GridScheduleSelfTest.java          |   13 +-
 .../testsuites/IgniteSchedulerTestSuite.java    |    8 +-
 .../logger/slf4j/Slf4jLoggerMarkerTest.java     |    5 +
 .../ignite/testsuites/IgniteSlf4jTestSuite.java |    3 +-
 .../spark/JavaEmbeddedIgniteRDDSelfTest.java    |   10 +-
 .../spark/JavaStandaloneIgniteRDDSelfTest.java  |   11 +-
 .../ignite/testsuites/IgniteRDDTestSuite.java   |    8 +-
 .../IgniteSpringDataCrudSelfTest.java           |   10 +
 .../IgniteSpringDataQueriesSelfTest.java        |   23 +
 .../testsuites/IgniteSpringData2TestSuite.java  |    8 +-
 .../IgniteSpringDataCrudSelfTest.java           |   10 +
 .../IgniteSpringDataQueriesSelfTest.java        |   24 +
 .../testsuites/IgniteSpringDataTestSuite.java   |    8 +-
 .../GridSpringCacheManagerAbstractTest.java     |   19 +
 .../GridSpringCacheManagerMultiJvmSelfTest.java |    5 +
 .../SpringCacheManagerContextInjectionTest.java |    6 +
 .../ignite/cache/spring/SpringCacheTest.java    |   12 +
 .../jdbc/CacheJdbcBlobStoreFactorySelfTest.java |    9 +-
 .../jdbc/CacheJdbcPojoStoreFactorySelfTest.java |    9 +-
 .../SpringEncryptedCacheRestartTest.java        |    9 +
 .../ignite/internal/GridFactorySelfTest.java    |   27 +-
 .../GridSpringBeanSerializationSelfTest.java    |    5 +
 .../internal/IgniteDynamicCacheConfigTest.java  |   10 +
 .../ignite/internal/IgniteSpringBeanTest.java   |    6 +
 .../resource/GridLoggerInjectionSelfTest.java   |    9 +-
 .../resource/GridResourceProcessorSelfTest.java |   20 +-
 .../resource/GridServiceInjectionSelfTest.java  |   16 +-
 .../GridSpringResourceInjectionSelfTest.java    |   20 +-
 .../GridTransformSpringInjectionSelfTest.java   |    5 +
 .../p2p/GridP2PUserVersionChangeSelfTest.java   |   13 +-
 .../IgniteExcludeInConfigurationTest.java       |    8 +-
 .../IgniteStartFromStreamConfigurationTest.java |    7 +-
 .../GridServiceInjectionSpringResourceTest.java |    5 +
 ...teSpringBeanSpringResourceInjectionTest.java |    6 +
 .../testsuites/IgniteResourceSelfTestSuite.java |   14 +-
 .../testsuites/IgniteSpringTestSuite.java       |   55 +-
 ...ridSpringTransactionManagerAbstractTest.java |    9 +
 ...gTransactionManagerContextInjectionTest.java |    8 +-
 .../util/nodestart/StartNodeCallableImpl.java   |  107 +-
 .../internal/IgniteNodeStartUtilsSelfTest.java  |    7 +-
 ...gniteProjectionStartStopRestartSelfTest.java |  216 +-
 .../IgniteStartStopRestartTestSuite.java        |    8 +-
 .../storm/IgniteStormStreamerSelfTestSuite.java |    7 +-
 .../storm/StormIgniteStreamerSelfTest.java      |    6 +-
 .../tfrunning/TensorFlowServerManager.java      |    2 +-
 .../TensorFlowServerScriptFormatter.java        |    2 +-
 .../cluster/util/TensorFlowClusterResolver.java |   12 +-
 .../util/TensorFlowProcessBuilderSupplier.java  |   14 +-
 .../twitter/IgniteTwitterStreamerTest.java      |    8 +-
 .../twitter/IgniteTwitterStreamerTestSuite.java |    6 +-
 .../uri/GridUriDeploymentDiscovery.java         |    1 -
 .../uri/GridUriDeploymentFileProcessor.java     |    1 -
 .../spi/deployment/uri/UriDeploymentSpi.java    |    2 -
 .../scanners/http/UriDeploymentHttpScanner.java |    4 +-
 .../GridTaskUriDeploymentDeadlockSelfTest.java  |    7 +-
 .../ignite/p2p/GridP2PDisabledSelfTest.java     |   11 +-
 ...loymentClassLoaderMultiThreadedSelfTest.java |    7 +-
 .../GridUriDeploymentClassLoaderSelfTest.java   |    8 +-
 ...riDeploymentClassloaderRegisterSelfTest.java |    8 +-
 .../uri/GridUriDeploymentConfigSelfTest.java    |    7 +-
 .../GridUriDeploymentFileProcessorSelfTest.java |    8 +
 .../uri/GridUriDeploymentMd5CheckSelfTest.java  |    6 +
 ...loymentMultiScannersErrorThrottlingTest.java |    5 +
 .../GridUriDeploymentMultiScannersSelfTest.java |    7 +-
 .../uri/GridUriDeploymentSimpleSelfTest.java    |   12 +-
 .../file/GridFileDeploymentSelfTest.java        |   11 +
 .../GridFileDeploymentUndeploySelfTest.java     |    7 +-
 .../http/GridHttpDeploymentSelfTest.java        |    6 +
 .../testsuites/IgniteToolsSelfTestSuite.java    |    8 +-
 .../IgniteUriDeploymentTestSuite.java           |   34 +-
 .../apache/ignite/tools/GridToolsSelfTest.java  |   15 +-
 .../commands/cache/VisorCacheCommand.scala      |   76 +-
 .../VisorCacheToggleStatisticsCommand.scala     |  152 +
 modules/web-console/DEVNOTES.txt                |   13 -
 .../web-console/backend/app/browsersHandler.js  |    5 +
 modules/web-console/backend/app/schemas.js      |    8 +-
 modules/web-console/backend/app/settings.js     |   12 +-
 modules/web-console/backend/index.js            |   10 +-
 modules/web-console/backend/launch-tools.js     |   20 +-
 .../web-console/backend/routes/activities.js    |    4 +-
 .../web-console/backend/services/activities.js  |    8 +-
 .../docker/compose/docker-compose.yml           |    3 +-
 .../web-console/docker/standalone/Dockerfile    |   76 -
 .../docker/standalone/docker-entrypoint.sh      |   23 -
 .../docker/standalone/nginx/nginx.conf          |   55 -
 .../docker/standalone/nginx/web-console.conf    |   62 -
 .../e2e/testcafe/components/FormField.js        |   11 +-
 .../e2e/testcafe/components/topNavigation.js    |    6 +-
 .../e2e/testcafe/components/userMenu.js         |    2 +-
 .../e2e/testcafe/page-models/pageSignup.js      |   14 +-
 modules/web-console/frontend/app/app.config.js  |    7 +
 modules/web-console/frontend/app/app.js         |   10 +-
 .../activities-user-dialog.controller.js        |    6 +-
 .../activities-user-dialog.tpl.pug              |    2 +-
 .../components/cluster-selector/controller.js   |   17 +-
 .../connected-clusters-badge/controller.js      |   11 +-
 .../connected-clusters-badge/style.scss         |   34 +-
 .../connected-clusters-badge/template.pug       |    5 +-
 .../components/list/controller.js               |    2 +-
 .../components/form-field-size/controller.js    |   25 +-
 .../components/form-field-size/index.js         |    3 +-
 .../components/form-field-size/style.scss       |   15 +
 .../components/form-field-size/template.pug     |    2 +
 .../form-field/showValidationError.directive.js |   21 +-
 .../app/components/ignite-chart/controller.js   |   49 +-
 .../input-dialog/input-dialog.tpl.pug           |    1 -
 .../frontend/app/components/page-admin/index.js |   16 +-
 .../components/cache-edit-form/controller.js    |   10 +-
 .../cache-edit-form/templates/memory.pug        |   37 +
 .../components/cluster-edit-form/controller.js  |   17 +-
 .../templates/data-storage.pug                  |    9 +
 .../cluster-edit-form/templates/failover.pug    |    9 +
 .../cluster-edit-form/templates/service.pug     |    4 +-
 .../cluster-edit-form/templates/ssl.pug         |    2 +-
 .../controller.js                               |   36 +-
 .../controller.js                               |   29 +-
 .../page-configure-advanced-igfs/controller.js  |   49 +-
 .../controller.js                               |   45 +-
 .../page-configure-basic/controller.js          |   87 +-
 .../page-configure-basic/controller.spec.js     |    6 +-
 .../page-configure-overview/controller.js       |   11 +-
 .../components/modal-import-models/component.js |  111 +-
 .../components/modal-import-models/service.js   |   48 +-
 .../page-configure/components/pcValidation.js   |   18 +-
 .../app/components/page-configure/controller.js |   15 +-
 .../page-configure/icons/configuration.icon.svg |   13 +
 .../app/components/page-configure/index.d.ts    |   29 +-
 .../app/components/page-configure/index.js      |  192 -
 .../app/components/page-configure/index.ts      |  186 +
 .../services/ConfigChangesGuard.js              |   11 +-
 .../services/ConfigSelectionManager.js          |   75 +-
 .../page-configure/services/ConfigureState.js   |   11 +-
 .../page-configure/services/PageConfigure.js    |   49 +-
 .../services/PageConfigure.spec.js              |   17 +-
 .../app/components/page-configure/states.js     |   62 +-
 .../components/page-configure/store/effects.js  |  638 ++--
 .../page-configure/store/effects.spec.js        |    7 +-
 .../page-configure/store/selectors.js           |  159 +-
 .../page-forgot-password/controller.js          |    8 +-
 .../app/components/page-forgot-password/run.js  |   11 +-
 .../components/page-forgot-password/style.scss  |   38 +-
 .../page-forgot-password/template.pug           |   53 +-
 .../app/components/page-landing/index.js        |   11 +-
 .../app/components/page-landing/public.pug      |   21 +
 .../app/components/page-landing/style.scss      |   12 +
 .../app/components/page-landing/template.pug    |    8 -
 .../page-password-changed/controller.js         |   26 -
 .../page-password-changed/controller.ts         |   32 +
 .../components/page-password-changed/index.js   |   10 +-
 .../components/page-password-changed/style.scss |   13 +-
 .../page-password-changed/template.pug          |    9 +-
 .../page-password-reset/controller.js           |   11 +-
 .../app/components/page-password-reset/index.js |   10 +-
 .../components/page-password-reset/style.scss   |   15 +-
 .../components/page-password-reset/template.pug |  102 +-
 .../app/components/page-profile/controller.js   |   12 +-
 .../app/components/page-profile/template.pug    |    5 +-
 .../query-actions-button/component.ts           |   28 +
 .../query-actions-button/controller.ts          |   53 +
 .../query-actions-button/template.pug           |   28 +
 .../components/queries-notebook/controller.js   | 1978 ----------
 .../components/queries-notebook/controller.ts   | 2001 ++++++++++
 .../components/queries-notebook/index.js        |    2 +
 .../queries-notebook/template.tpl.pug           |   54 +-
 .../app/components/page-queries/index.js        |   87 -
 .../app/components/page-queries/index.ts        |  110 +
 .../components/page-queries/notebook.data.js    |    3 -
 .../app/components/page-signin/controller.ts    |   10 +-
 .../frontend/app/components/page-signin/run.ts  |   10 +-
 .../app/components/page-signin/style.scss       |   33 +-
 .../app/components/page-signin/template.pug     |   73 +-
 .../app/components/page-signup/controller.ts    |   11 +-
 .../frontend/app/components/page-signup/run.js  |   11 +-
 .../app/components/page-signup/style.scss       |   26 +-
 .../app/components/page-signup/template.pug     |   36 +-
 .../permanent-notifications/component.ts        |   25 +
 .../permanent-notifications/controller.ts       |   28 +
 .../components/permanent-notifications/index.ts |   21 +
 .../permanent-notifications/style.scss          |   54 +
 .../permanent-notifications/template.pug        |   23 +
 .../components/timed-redirection/component.ts   |   29 +
 .../components/timed-redirection/controller.ts  |   60 +
 .../app/components/timed-redirection/index.ts   |   23 +
 .../app/components/timed-redirection/style.scss |   48 +
 .../components/timed-redirection/template.pug   |   22 +
 .../app/components/ui-grid/component.js         |    1 +
 .../app/components/ui-grid/controller.js        |   10 +
 .../frontend/app/components/ui-grid/style.scss  |    1 +
 .../components/web-console-footer/component.js  |    4 +-
 .../web-console-footer-links/component.js       |   23 -
 .../web-console-footer-links/style.scss         |   31 -
 .../web-console-footer-links/template.pug       |   17 -
 .../components/web-console-footer/controller.ts |   27 +
 .../app/components/web-console-footer/index.js  |   11 +-
 .../components/web-console-footer/style.scss    |   93 +-
 .../components/web-console-footer/template.pug  |   20 +-
 .../components/web-console-header/component.js  |   53 -
 .../components/web-console-header/component.ts  |   43 +
 .../components/demo-mode-button/component.ts    |   24 +
 .../components/demo-mode-button/controller.ts   |   46 +
 .../components/demo-mode-button/template.pug    |   20 +
 .../components/user-menu/component.ts           |   25 +
 .../components/user-menu/controller.ts          |   53 +
 .../components/user-menu/style.scss             |   28 +
 .../components/user-menu/template.pug           |   26 +
 .../web-console-header-content/component.ts     |   25 +
 .../web-console-header-content/controller.ts    |   45 +
 .../web-console-header-content/style.scss       |   44 +
 .../web-console-header-content/template.pug     |   24 +
 .../web-console-header-extension/component.js   |   22 -
 .../web-console-header-extension/template.pug   |   15 -
 .../app/components/web-console-header/index.js  |    8 +-
 .../components/web-console-header/style.scss    |  168 +-
 .../components/web-console-header/template.pug  |   32 +-
 .../components/web-console-sidebar/component.ts |   25 +
 .../web-console-sidebar/controller.ts           |   30 +
 .../app/components/web-console-sidebar/index.ts |   25 +
 .../components/web-console-sidebar/style.scss   |   44 +
 .../components/web-console-sidebar/template.pug |   22 +
 .../web-console-sidebar-navigation/component.ts |   28 +
 .../controller.ts                               |   24 +
 .../web-console-sidebar-navigation/style.scss   |  109 +
 .../web-console-sidebar-navigation/template.pug |   35 +
 .../web-console-sidebar-overflow/component.ts   |   26 +
 .../web-console-sidebar-overflow/controller.ts  |   50 +
 .../web-console-sidebar-overflow/style.scss     |   52 +
 .../web-console-sidebar-overflow/template.pug   |   18 +
 modules/web-console/frontend/app/data/i18n.js   |   25 +-
 .../app/modules/agent/AgentManager.service.js   |   88 +-
 .../agent/components/cluster-login/service.js   |    5 +
 .../app/modules/branding/branding.module.js     |   10 +-
 .../app/modules/branding/branding.service.js    |    4 -
 .../app/modules/branding/footer.directive.js    |   39 -
 .../modules/branding/header-logo.directive.js   |   39 -
 .../app/modules/branding/header-logo.pug        |   18 -
 .../modules/branding/header-title.directive.js  |   44 -
 .../branding/powered-by-apache.directive.js     |   39 -
 .../app/modules/branding/powered-by-apache.pug  |   18 -
 .../app/modules/cluster/CacheMetrics.js         |    3 +
 .../generator/ConfigurationGenerator.js         |   22 +-
 .../configuration/generator/Maven.service.js    |    3 +
 .../generator/defaults/Cache.service.js         |    5 +-
 .../frontend/app/modules/demo/Demo.module.js    |   28 -
 .../app/modules/navbar/Navbar.provider.js       |   30 -
 .../app/modules/navbar/navbar.directive.js      |   32 -
 .../app/modules/navbar/navbar.module.js         |    9 +-
 .../app/modules/navbar/userbar.directive.js     |   59 -
 .../frontend/app/modules/states/errors.state.js |   18 +-
 .../frontend/app/modules/user/User.service.js   |    2 +-
 .../frontend/app/modules/user/user.module.js    |    8 -
 .../app/primitives/datepicker/index.pug         |    6 +-
 .../app/primitives/form-field/dropdown.pug      |    6 +-
 .../app/primitives/form-field/email.pug         |    6 +-
 .../app/primitives/form-field/number.pug        |    6 +-
 .../app/primitives/form-field/password.pug      |    8 +-
 .../app/primitives/form-field/phone.pug         |    5 +-
 .../frontend/app/primitives/form-field/text.pug |    6 +-
 .../app/primitives/form-field/typeahead.pug     |    6 +-
 .../frontend/app/primitives/modal/index.scss    |   26 +-
 .../app/primitives/timepicker/index.pug         |    6 +-
 .../web-console/frontend/app/services/Caches.js |    8 +
 .../frontend/app/services/Clusters.js           |    9 +-
 .../frontend/app/services/Version.service.js    |    8 +-
 .../web-console/frontend/app/services/store.ts  |   73 +
 .../frontend/app/store/actions/ui.ts            |   36 +
 .../frontend/app/store/actions/user.ts          |   24 +
 .../frontend/app/store/effects/ui.ts            |   32 +
 modules/web-console/frontend/app/store/index.ts |   48 +
 .../web-console/frontend/app/store/ofType.ts    |   26 +
 .../frontend/app/store/reducers/ui.ts           |   50 +
 .../frontend/app/store/reduxDebug.ts            |   45 +
 .../frontend/app/store/selectors/ui.ts          |   29 +
 modules/web-console/frontend/app/types/index.ts |   39 +-
 .../frontend/app/utils/SimpleWorkerPool.js      |   19 +-
 modules/web-console/frontend/app/vendor.js      |    2 +
 modules/web-console/frontend/package.json       |    9 +-
 .../public/images/icons/cluster.icon.svg        |   10 +
 .../images/icons/connectedClusters.icon.svg     |    1 -
 .../public/images/icons/downloadAgent.icon.svg  |   16 +
 .../frontend/public/images/icons/index.js       |    5 +-
 .../frontend/public/images/icons/menu.icon.svg  |    7 +
 .../frontend/public/images/icons/sql.icon.svg   |    3 +
 .../frontend/public/stylesheets/style.scss      |  132 +-
 modules/web-console/frontend/test/ci/Dockerfile |    6 +-
 modules/web-console/frontend/views/403.tpl.pug  |   24 -
 modules/web-console/frontend/views/404.tpl.pug  |   24 -
 modules/web-console/frontend/views/base.pug     |   11 +-
 .../frontend/views/includes/header-left.pug     |   42 -
 .../frontend/views/includes/header-right.pug    |   35 -
 modules/web-console/frontend/views/index.pug    |    4 -
 modules/web-console/frontend/views/public.pug   |   20 +
 modules/web-console/pom.xml                     |   38 -
 .../web-agent/bin/ignite-web-agent.sh           |   38 +-
 .../console/agent/handlers/ClusterListener.java |   10 +
 .../ignite/console/agent/rest/RestExecutor.java |   24 +-
 .../service/DemoRandomCacheLoadService.java     |   22 +-
 .../cache/websession/WebSessionFilter.java      |    4 -
 .../ignite/startup/servlet/ServletStartup.java  |    1 -
 .../IgniteWebSessionSelfTestSuite.java          |   19 +-
 .../internal/websession/WebSessionSelfTest.java |   16 +-
 modules/yardstick/DEVNOTES.txt                  |    2 +-
 .../config/benchmark-select.properties          |  159 +
 modules/yardstick/config/ignite-base-config.xml |    3 +
 .../yardstick/IgniteAbstractBenchmark.java      |   43 +-
 .../yardstick/IgniteBenchmarkArguments.java     |   16 +-
 .../org/apache/ignite/yardstick/IgniteNode.java |    6 +-
 .../cache/IgniteGetAllTxBenchmark.java          |   50 +
 .../cache/IgniteSqlQueryFullScanBenchmark.java  |   97 +
 .../apache/ignite/yardstick/cache/Loader.java   |    4 +-
 .../yardstick/cache/model/PersonNoIndex.java    |  215 ++
 .../jdbc/JdbcSqlQueryRangeBenchmark.java        |   29 +-
 .../apache/ignite/yardstick/jdbc/JdbcUtils.java |   25 +-
 .../jdbc/NativeSqlQueryRangeBenchmark.java      |   24 +-
 .../ignite/yardstick/jdbc/SelectCommand.java    |   85 +
 .../ignite/yardstick/upload/model/Values10.java |    1 -
 .../org/apache/ignite/IgniteYarnTestSuite.java  |    8 +-
 .../yarn/IgniteApplicationMasterSelfTest.java   |   28 +-
 .../stream/zeromq/IgniteZeroMqStreamerTest.java |    8 +
 .../zeromq/IgniteZeroMqStreamerTestSuite.java   |    6 +-
 .../spi/discovery/zk/ZookeeperDiscoverySpi.java |    7 +
 .../zk/internal/ZookeeperDiscoveryImpl.java     |   28 +-
 .../tcp/ipfinder/zk/ZookeeperIpFinderTest.java  |   12 +
 ...CacheEntryListenerWithZkDiscoAtomicTest.java |    5 +
 .../zk/ZookeeperDiscoverySpiTestSuite1.java     |   12 +-
 .../zk/ZookeeperDiscoverySpiTestSuite2.java     |   59 +-
 .../zk/ZookeeperDiscoverySpiTestSuite3.java     |   63 +
 .../zk/ZookeeperDiscoverySpiTestSuite4.java     |   58 +
 ...ZookeeperDiscoverySuitePreprocessorTest.java |    5 +
 .../zk/internal/ZookeeperClientTest.java        |   22 +
 ...ZookeeperDiscoverySpiSaslFailedAuthTest.java |    5 +
 ...eeperDiscoverySpiSaslSuccessfulAuthTest.java |    6 +
 .../zk/internal/ZookeeperDiscoverySpiTest.java  |  116 +-
 parent/pom.xml                                  |   12 +-
 pom.xml                                         |    4 +
 4154 files changed, 131201 insertions(+), 43850 deletions(-)
----------------------------------------------------------------------



[51/52] [abbrv] ignite git commit: merge

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicAbstractUpdateFuture.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
----------------------------------------------------------------------
diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
index dc98854,072918e..dcea831
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicUpdateFuture.java
@@@ -923,12 -911,9 +919,11 @@@ public class GridNearAtomicUpdateFutur
       * @return Mapping.
       * @throws Exception If failed.
       */
-     @SuppressWarnings("ForLoopReplaceableByForEach")
 -    private Map<UUID, PrimaryRequestState> mapUpdate(Collection<ClusterNode> topNodes,
 +    private Map<UUID, PrimaryRequestState> mapUpdate(
 +        Collection<ClusterNode> topNodes,
          AffinityTopologyVersion topVer,
          Long futId,
 +        boolean remap,
          @Nullable Collection<KeyCacheObject> remapKeys,
          boolean mappingKnown) throws Exception {
          Iterator<?> it = null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearAtomicCache.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearCacheEntry.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java
----------------------------------------------------------------------
diff --cc modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java
index 462ca31,6cb9d05..7c5c953
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheValueConsistencyAbstractSelfTest.java
@@@ -219,7 -235,11 +235,8 @@@ public abstract class GridCacheValueCon
      /**
       * @throws Exception If failed.
       */
+     @Test
      public void testPutConsistencyMultithreaded() throws Exception {
 -        if (nearEnabled())
 -            fail("https://issues.apache.org/jira/browse/IGNITE-627");
 -
          for (int i = 0; i < 20; i++) {
              log.info("Iteration: " + i);
  
@@@ -269,8 -289,12 +286,9 @@@
      /**
       * @throws Exception If failed.
       */
+     @Test
      public void testPutRemoveConsistencyMultithreaded() throws Exception {
-        for (int i = 0; i < 10; i++) {
 -        if (nearEnabled())
 -            fail("https://issues.apache.org/jira/browse/IGNITE-627");
 -
+        for (int i = 0; i < SF.applyLB(10, 2); i++) {
             log.info("Iteration: " + i);
  
             putRemoveConsistencyMultithreaded();

http://git-wip-us.apache.org/repos/asf/ignite/blob/404a9f3b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/IgniteCacheAtomicProtocolTest.java
----------------------------------------------------------------------


[45/52] [abbrv] ignite git commit: IGNITE-9893 IGNITE-1757 IGNITE-10723 Adding hibernate-5.3 module

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateCacheProxy.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateCacheProxy.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateCacheProxy.java
index 1752313..f53a14c 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateCacheProxy.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateCacheProxy.java
@@ -24,6 +24,7 @@ import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.function.Supplier;
 import javax.cache.Cache;
 import javax.cache.expiry.ExpiryPolicy;
 import javax.cache.processor.EntryProcessor;
@@ -51,23 +52,30 @@ import org.jetbrains.annotations.Nullable;
  * Hibernate cache proxy used to substitute hibernate keys with ignite keys.
  */
 public class HibernateCacheProxy implements IgniteInternalCache<Object, Object> {
-    /** Delegate. */
-    private final IgniteInternalCache<Object, Object> delegate;
+    /** Delegate is lazily loaded which allows for creation of caches after the SPI is bootstrapped */
+    private final Supplier<IgniteInternalCache<Object, Object>> delegate;
 
     /** Transformer. */
     private final HibernateKeyTransformer keyTransformer;
 
+    /** */
+    private String cacheName;
+
     /**
+     * @param cacheName Cache name. Should match delegate.get().name(). Needed for lazy loading.
      * @param delegate Delegate.
      * @param keyTransformer Key keyTransformer.
      */
     HibernateCacheProxy(
-        IgniteInternalCache<Object, Object> delegate,
+        String cacheName,
+        Supplier<IgniteInternalCache<Object, Object>> delegate,
         HibernateKeyTransformer keyTransformer
     ) {
+        assert cacheName != null;
         assert delegate != null;
         assert keyTransformer != null;
 
+        this.cacheName = cacheName;
         this.delegate = delegate;
         this.keyTransformer = keyTransformer;
     }
@@ -81,42 +89,42 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
 
     /** {@inheritDoc} */
     @Override public String name() {
-        return delegate.name();
+        return cacheName;
     }
 
     /** {@inheritDoc} */
     @Override public boolean skipStore() {
-        return delegate.skipStore();
+        return delegate.get().skipStore();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalCache setSkipStore(boolean skipStore) {
-        return delegate.setSkipStore(skipStore);
+        return delegate.get().setSkipStore(skipStore);
     }
 
     /** {@inheritDoc} */
     @Override public boolean isEmpty() {
-        return delegate.isEmpty();
+        return delegate.get().isEmpty();
     }
 
     /** {@inheritDoc} */
     @Override public boolean containsKey(Object key) {
-        return delegate.containsKey(keyTransformer.transform(key));
+        return delegate.get().containsKey(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> containsKeyAsync(Object key) {
-        return delegate.containsKeyAsync(keyTransformer.transform(key));
+        return delegate.get().containsKeyAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public boolean containsKeys(Collection keys) {
-        return delegate.containsKey(transform(keys));
+        return delegate.get().containsKey(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> containsKeysAsync(Collection keys) {
-        return delegate.containsKeysAsync(transform(keys));
+        return delegate.get().containsKeysAsync(transform(keys));
     }
 
     /** {@inheritDoc} */
@@ -124,147 +132,147 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         Object key,
         CachePeekMode[] peekModes
     ) throws IgniteCheckedException {
-        return delegate.localPeek(keyTransformer.transform(key), peekModes);
+        return delegate.get().localPeek(keyTransformer.transform(key), peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public Iterable<Cache.Entry<Object, Object>> localEntries(
         CachePeekMode[] peekModes
     ) throws IgniteCheckedException {
-        return delegate.localEntries(peekModes);
+        return delegate.get().localEntries(peekModes);
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object get(Object key) throws IgniteCheckedException {
-        return delegate.get(keyTransformer.transform(key));
+        return delegate.get().get(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public CacheEntry getEntry(Object key) throws IgniteCheckedException {
-        return delegate.getEntry(keyTransformer.transform(key));
+        return delegate.get().getEntry(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture getAsync(Object key) {
-        return delegate.getAsync(keyTransformer.transform(key));
+        return delegate.get().getAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<CacheEntry<Object, Object>> getEntryAsync(Object key) {
-        return delegate.getEntryAsync(keyTransformer.transform(key));
+        return delegate.get().getEntryAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public Map getAll(@Nullable Collection keys) throws IgniteCheckedException {
-        return delegate.getAll(transform(keys));
+        return delegate.get().getAll(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public Collection<CacheEntry<Object, Object>> getEntries(
         @Nullable Collection keys) throws IgniteCheckedException {
-        return delegate.getEntries(transform(keys));
+        return delegate.get().getEntries(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Map<Object, Object>> getAllAsync(@Nullable Collection keys) {
-        return delegate.getAllAsync(transform(keys));
+        return delegate.get().getAllAsync(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Collection<CacheEntry<Object,Object>>> getEntriesAsync(
         @Nullable Collection keys
     ) {
-        return delegate.getEntriesAsync(transform(keys));
+        return delegate.get().getEntriesAsync(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object getAndPut(Object key, Object val) throws IgniteCheckedException {
-        return delegate.getAndPut(keyTransformer.transform(key), val);
+        return delegate.get().getAndPut(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture getAndPutAsync(Object key, Object val) {
-        return delegate.getAndPutAsync(keyTransformer.transform(key), val);
+        return delegate.get().getAndPutAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public boolean put(Object key, Object val) throws IgniteCheckedException {
-        return delegate.put(keyTransformer.transform(key), val);
+        return delegate.get().put(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> putAsync(Object key, Object val) {
-        return delegate.putAsync(keyTransformer.transform(key), val);
+        return delegate.get().putAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object getAndPutIfAbsent(Object key, Object val) throws IgniteCheckedException {
-        return delegate.getAndPutIfAbsent(keyTransformer.transform(key), val);
+        return delegate.get().getAndPutIfAbsent(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture getAndPutIfAbsentAsync(Object key, Object val) {
-        return delegate.getAndPutIfAbsentAsync(keyTransformer.transform(key), val);
+        return delegate.get().getAndPutIfAbsentAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public boolean putIfAbsent(Object key, Object val) throws IgniteCheckedException {
-        return delegate.putIfAbsent(keyTransformer.transform(key), val);
+        return delegate.get().putIfAbsent(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> putIfAbsentAsync(Object key, Object val) {
-        return delegate.putIfAbsentAsync(keyTransformer.transform(key), val);
+        return delegate.get().putIfAbsentAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object getAndReplace(Object key, Object val) throws IgniteCheckedException {
-        return delegate.getAndReplace(keyTransformer.transform(key), val);
+        return delegate.get().getAndReplace(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture getAndReplaceAsync(Object key, Object val) {
-        return delegate.getAndReplaceAsync(keyTransformer.transform(key), val);
+        return delegate.get().getAndReplaceAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public boolean replace(Object key, Object val) throws IgniteCheckedException {
-        return delegate.replace(keyTransformer.transform(key), val);
+        return delegate.get().replace(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> replaceAsync(Object key, Object val) {
-        return delegate.replaceAsync(keyTransformer.transform(key), val);
+        return delegate.get().replaceAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public boolean replace(Object key, Object oldVal, Object newVal) throws IgniteCheckedException {
-        return delegate.replace(keyTransformer.transform(key), oldVal, newVal);
+        return delegate.get().replace(keyTransformer.transform(key), oldVal, newVal);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> replaceAsync(Object key, Object oldVal, Object newVal) {
-        return delegate.replaceAsync(keyTransformer.transform(key), oldVal, newVal);
+        return delegate.get().replaceAsync(keyTransformer.transform(key), oldVal, newVal);
     }
 
     /** {@inheritDoc} */
     @Override public void putAll(@Nullable Map m) throws IgniteCheckedException {
-        delegate.putAll(transform(m));
+        delegate.get().putAll(transform(m));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> putAllAsync(@Nullable Map m) {
-        return delegate.putAllAsync(transform(m));
+        return delegate.get().putAllAsync(transform(m));
     }
 
     /** {@inheritDoc} */
     @Override public Set keySet() {
-        return delegate.keySet();
+        return delegate.get().keySet();
     }
 
     /** {@inheritDoc} */
     @Override public Set<Cache.Entry<Object, Object>> entrySet() {
-        return delegate.entrySet();
+        return delegate.get().entrySet();
     }
 
     /** {@inheritDoc} */
@@ -272,7 +280,7 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         TransactionConcurrency concurrency,
         TransactionIsolation isolation
     ) {
-        return delegate.txStart(concurrency, isolation);
+        return delegate.get().txStart(concurrency, isolation);
     }
 
     /** {@inheritDoc} */
@@ -280,7 +288,7 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         TransactionConcurrency concurrency,
         TransactionIsolation isolation
     ) {
-        return delegate.txStartEx(concurrency, isolation);
+        return delegate.get().txStartEx(concurrency, isolation);
     }
 
     /** {@inheritDoc} */
@@ -290,337 +298,337 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         long timeout,
         int txSize
     ) {
-        return delegate.txStart(concurrency, isolation, timeout, txSize);
+        return delegate.get().txStart(concurrency, isolation, timeout, txSize);
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public GridNearTxLocal tx() {
-        return delegate.tx();
+        return delegate.get().tx();
     }
 
     /** {@inheritDoc} */
     @Override public boolean evict(Object key) {
-        return delegate.evict(keyTransformer.transform(key));
+        return delegate.get().evict(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public void evictAll(@Nullable Collection keys) {
-        delegate.evictAll(transform(keys));
+        delegate.get().evictAll(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public void clearLocally(boolean srv, boolean near, boolean readers) {
-        delegate.clearLocally(srv, near, readers);
+        delegate.get().clearLocally(srv, near, readers);
     }
 
     /** {@inheritDoc} */
     @Override public boolean clearLocally(Object key) {
-        return delegate.clearLocally(keyTransformer.transform(key));
+        return delegate.get().clearLocally(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public void clearLocallyAll(Set keys, boolean srv, boolean near, boolean readers) {
-        delegate.clearLocallyAll((Set<?>)transform(keys), srv, near, readers);
+        delegate.get().clearLocallyAll((Set<?>)transform(keys), srv, near, readers);
     }
 
     /** {@inheritDoc} */
     @Override public void clear(Object key) throws IgniteCheckedException {
-        delegate.clear(keyTransformer.transform(key));
+        delegate.get().clear(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public void clearAll(Set keys) throws IgniteCheckedException {
-        delegate.clearAll((Set<?>)transform(keys));
+        delegate.get().clearAll((Set<?>)transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public void clear() throws IgniteCheckedException {
-        delegate.clear();
+        delegate.get().clear();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> clearAsync() {
-        return delegate.clearAsync();
+        return delegate.get().clearAsync();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> clearAsync(Object key) {
-        return delegate.clearAsync(keyTransformer.transform(key));
+        return delegate.get().clearAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> clearAllAsync(Set keys) {
-        return delegate.clearAllAsync((Set<?>)transform(keys));
+        return delegate.get().clearAllAsync((Set<?>)transform(keys));
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object getAndRemove(Object key) throws IgniteCheckedException {
-        return delegate.getAndRemove(keyTransformer.transform(key));
+        return delegate.get().getAndRemove(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture getAndRemoveAsync(Object key) {
-        return delegate.getAndRemoveAsync(keyTransformer.transform(key));
+        return delegate.get().getAndRemoveAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public boolean remove(Object key) throws IgniteCheckedException {
-        return delegate.remove(keyTransformer.transform(key));
+        return delegate.get().remove(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> removeAsync(Object key) {
-        return delegate.removeAsync(keyTransformer.transform(key));
+        return delegate.get().removeAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public boolean remove(Object key, Object val) throws IgniteCheckedException {
-        return delegate.remove(keyTransformer.transform(key), val);
+        return delegate.get().remove(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> removeAsync(Object key, Object val) {
-        return delegate.removeAsync(keyTransformer.transform(key), val);
+        return delegate.get().removeAsync(keyTransformer.transform(key), val);
     }
 
     /** {@inheritDoc} */
     @Override public void removeAll(@Nullable Collection keys) throws IgniteCheckedException {
-        delegate.removeAll(transform(keys));
+        delegate.get().removeAll(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> removeAllAsync(@Nullable Collection keys) {
-        return delegate.removeAllAsync(transform(keys));
+        return delegate.get().removeAllAsync(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public void removeAll() throws IgniteCheckedException {
-        delegate.removeAll();
+        delegate.get().removeAll();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> removeAllAsync() {
-        return delegate.removeAllAsync();
+        return delegate.get().removeAllAsync();
     }
 
     /** {@inheritDoc} */
     @Override public boolean lock(Object key, long timeout) throws IgniteCheckedException {
-        return delegate.lock(keyTransformer.transform(key), timeout);
+        return delegate.get().lock(keyTransformer.transform(key), timeout);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> lockAsync(Object key, long timeout) {
-        return delegate.lockAsync(keyTransformer.transform(key), timeout);
+        return delegate.get().lockAsync(keyTransformer.transform(key), timeout);
     }
 
     /** {@inheritDoc} */
     @Override public boolean lockAll(@Nullable Collection keys, long timeout) throws IgniteCheckedException {
-        return delegate.lockAll(transform(keys), timeout);
+        return delegate.get().lockAll(transform(keys), timeout);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Boolean> lockAllAsync(@Nullable Collection keys, long timeout) {
-        return delegate.lockAllAsync(transform(keys), timeout);
+        return delegate.get().lockAllAsync(transform(keys), timeout);
     }
 
     /** {@inheritDoc} */
     @Override public void unlock(Object key) throws IgniteCheckedException {
-        delegate.unlock(keyTransformer.transform(key));
+        delegate.get().unlock(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public void unlockAll(@Nullable Collection keys) throws IgniteCheckedException {
-        delegate.unlockAll(transform(keys));
+        delegate.get().unlockAll(transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public boolean isLocked(Object key) {
-        return delegate.isLocked(keyTransformer.transform(key));
+        return delegate.get().isLocked(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public boolean isLockedByThread(Object key) {
-        return delegate.isLockedByThread(keyTransformer.transform(key));
+        return delegate.get().isLockedByThread(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public int size() {
-        return delegate.size();
+        return delegate.get().size();
     }
 
     /** {@inheritDoc} */
     @Override public long sizeLong() {
-        return delegate.sizeLong();
+        return delegate.get().sizeLong();
     }
 
     /** {@inheritDoc} */
     @Override public int localSize(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return delegate.localSize(peekModes);
+        return delegate.get().localSize(peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public long localSizeLong(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return delegate.localSizeLong(peekModes);
+        return delegate.get().localSizeLong(peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public long localSizeLong(int partition, CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return delegate.localSizeLong(partition, peekModes);
+        return delegate.get().localSizeLong(partition, peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public int size(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return delegate.size(peekModes);
+        return delegate.get().size(peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public long sizeLong(CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return delegate.sizeLong(peekModes);
+        return delegate.get().sizeLong(peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public long sizeLong(int partition, CachePeekMode[] peekModes) throws IgniteCheckedException {
-        return delegate.sizeLong(partition, peekModes);
+        return delegate.get().sizeLong(partition, peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Integer> sizeAsync(CachePeekMode[] peekModes) {
-        return delegate.sizeAsync(peekModes);
+        return delegate.get().sizeAsync(peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Long> sizeLongAsync(CachePeekMode[] peekModes) {
-        return delegate.sizeLongAsync(peekModes);
+        return delegate.get().sizeLongAsync(peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Long> sizeLongAsync(int partition, CachePeekMode[] peekModes) {
-        return delegate.sizeLongAsync(partition, peekModes);
+        return delegate.get().sizeLongAsync(partition, peekModes);
     }
 
     /** {@inheritDoc} */
     @Override public int nearSize() {
-        return delegate.nearSize();
+        return delegate.get().nearSize();
     }
 
     /** {@inheritDoc} */
     @Override public int primarySize() {
-        return delegate.primarySize();
+        return delegate.get().primarySize();
     }
 
     /** {@inheritDoc} */
     @Override public long primarySizeLong() {
-        return delegate.primarySizeLong();
+        return delegate.get().primarySizeLong();
     }
 
     /** {@inheritDoc} */
     @Override public CacheConfiguration configuration() {
-        return delegate.configuration();
+        return delegate.get().configuration();
     }
 
     /** {@inheritDoc} */
     @Override public Affinity affinity() {
-        return delegate.affinity();
+        return delegate.get().affinity();
     }
 
     /** {@inheritDoc} */
     @Override public CacheMetrics clusterMetrics() {
-        return delegate.clusterMetrics();
+        return delegate.get().clusterMetrics();
     }
 
     /** {@inheritDoc} */
     @Override public CacheMetrics clusterMetrics(ClusterGroup grp) {
-        return delegate.clusterMetrics(grp);
+        return delegate.get().clusterMetrics(grp);
     }
 
     /** {@inheritDoc} */
     @Override public CacheMetrics localMetrics() {
-        return delegate.localMetrics();
+        return delegate.get().localMetrics();
     }
 
     /** {@inheritDoc} */
     @Override public CacheMetricsMXBean clusterMxBean() {
-        return delegate.clusterMxBean();
+        return delegate.get().clusterMxBean();
     }
 
     /** {@inheritDoc} */
     @Override public CacheMetricsMXBean localMxBean() {
-        return delegate.localMxBean();
+        return delegate.get().localMxBean();
     }
 
     /** {@inheritDoc} */
     @Override public long offHeapEntriesCount() {
-        return delegate.offHeapEntriesCount();
+        return delegate.get().offHeapEntriesCount();
     }
 
     /** {@inheritDoc} */
     @Override public long offHeapAllocatedSize() {
-        return delegate.offHeapAllocatedSize();
+        return delegate.get().offHeapAllocatedSize();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> rebalance() {
-        return delegate.rebalance();
+        return delegate.get().rebalance();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalCache forSubjectId(UUID subjId) {
-        return delegate.forSubjectId(subjId);
+        return delegate.get().forSubjectId(subjId);
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public Object getForcePrimary(Object key) throws IgniteCheckedException {
-        return delegate.getForcePrimary(keyTransformer.transform(key));
+        return delegate.get().getForcePrimary(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture getForcePrimaryAsync(Object key) {
-        return delegate.getForcePrimaryAsync(keyTransformer.transform(key));
+        return delegate.get().getForcePrimaryAsync(keyTransformer.transform(key));
     }
 
     /** {@inheritDoc} */
     @Override public Map getAllOutTx(Set keys) throws IgniteCheckedException {
-        return delegate.getAllOutTx((Set<?>)transform(keys));
+        return delegate.get().getAllOutTx((Set<?>)transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Map<Object, Object>> getAllOutTxAsync(Set keys) {
-        return delegate.getAllOutTxAsync((Set<?>)transform(keys));
+        return delegate.get().getAllOutTxAsync((Set<?>)transform(keys));
     }
 
     /** {@inheritDoc} */
     @Override public boolean isIgfsDataCache() {
-        return delegate.isIgfsDataCache();
+        return delegate.get().isIgfsDataCache();
     }
 
     /** {@inheritDoc} */
     @Override public long igfsDataSpaceUsed() {
-        return delegate.igfsDataSpaceUsed();
+        return delegate.get().igfsDataSpaceUsed();
     }
 
     /** {@inheritDoc} */
     @Nullable @Override public ExpiryPolicy expiry() {
-        return delegate.expiry();
+        return delegate.get().expiry();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalCache withExpiryPolicy(ExpiryPolicy plc) {
-        return delegate.withExpiryPolicy(plc);
+        return delegate.get().withExpiryPolicy(plc);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalCache withNoRetries() {
-        return delegate.withNoRetries();
+        return delegate.get().withNoRetries();
     }
 
     /** {@inheritDoc} */
     @Override public <K1, V1> IgniteInternalCache<K1, V1> withAllowAtomicOpsInTx() {
-        return delegate.withAllowAtomicOpsInTx();
+        return delegate.get().withAllowAtomicOpsInTx();
     }
 
     /** {@inheritDoc} */
     @Override public GridCacheContext context() {
-        return delegate.context();
+        return delegate.get().context();
     }
 
     /** {@inheritDoc} */
@@ -628,7 +636,7 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         @Nullable IgniteBiPredicate p,
         @Nullable Object... args
     ) throws IgniteCheckedException {
-        delegate.localLoadCache(p, args);
+        delegate.get().localLoadCache(p, args);
     }
 
     /** {@inheritDoc} */
@@ -636,27 +644,27 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         @Nullable IgniteBiPredicate p,
         @Nullable Object... args
     ) {
-        return delegate.localLoadCacheAsync(p, args);
+        return delegate.get().localLoadCacheAsync(p, args);
     }
 
     /** {@inheritDoc} */
     @Override public Collection<Integer> lostPartitions() {
-        return delegate.lostPartitions();
+        return delegate.get().lostPartitions();
     }
 
     /** {@inheritDoc} */
     @Override public void preloadPartition(int part) throws IgniteCheckedException {
-        delegate.preloadPartition(part);
+        delegate.get().preloadPartition(part);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> preloadPartitionAsync(int part) throws IgniteCheckedException {
-        return delegate.preloadPartitionAsync(part);
+        return delegate.get().preloadPartitionAsync(part);
     }
 
     /** {@inheritDoc} */
     @Override public boolean localPreloadPartition(int part) throws IgniteCheckedException {
-        return delegate.localPreloadPartition(part);
+        return delegate.get().localPreloadPartition(part);
     }
 
     /** {@inheritDoc} */
@@ -666,27 +674,27 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         EntryProcessor entryProcessor,
         Object... args
     ) throws IgniteCheckedException {
-        return delegate.invoke(topVer, key, entryProcessor, args);
+        return delegate.get().invoke(topVer, key, entryProcessor, args);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Map> invokeAllAsync(Map map, Object... args) {
-        return delegate.invokeAllAsync(map, args);
+        return delegate.get().invokeAllAsync(map, args);
     }
 
     /** {@inheritDoc} */
     @Override public Map invokeAll(Map map, Object... args) throws IgniteCheckedException {
-        return delegate.invokeAll(map, args);
+        return delegate.get().invokeAll(map, args);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<Map> invokeAllAsync(Set keys, EntryProcessor entryProcessor, Object... args) {
-        return delegate.invokeAllAsync((Set<?>)transform(keys), entryProcessor, args);
+        return delegate.get().invokeAllAsync((Set<?>)transform(keys), entryProcessor, args);
     }
 
     /** {@inheritDoc} */
     @Override public Map invokeAll(Set keys, EntryProcessor entryProcessor, Object... args) throws IgniteCheckedException {
-        return delegate.invokeAll((Set<?>)transform(keys), entryProcessor, args);
+        return delegate.get().invokeAll((Set<?>)transform(keys), entryProcessor, args);
     }
 
     /** {@inheritDoc} */
@@ -695,7 +703,7 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         EntryProcessor entryProcessor,
         Object... args
     ) {
-        return delegate.invokeAsync(keyTransformer.transform(key), entryProcessor, args);
+        return delegate.get().invokeAsync(keyTransformer.transform(key), entryProcessor, args);
     }
 
     /** {@inheritDoc} */
@@ -704,7 +712,7 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         EntryProcessor entryProcessor,
         Object... args
     ) throws IgniteCheckedException {
-        return delegate.invoke(keyTransformer.transform(key), entryProcessor, args);
+        return delegate.get().invoke(keyTransformer.transform(key), entryProcessor, args);
     }
 
     /** {@inheritDoc} */
@@ -712,42 +720,42 @@ public class HibernateCacheProxy implements IgniteInternalCache<Object, Object>
         boolean keepBinary,
         @Nullable IgniteBiPredicate p
     ) throws IgniteCheckedException {
-        return delegate.scanIterator(keepBinary, p);
+        return delegate.get().scanIterator(keepBinary, p);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> removeAllConflictAsync(Map drMap) throws IgniteCheckedException {
-        return delegate.removeAllConflictAsync(drMap);
+        return delegate.get().removeAllConflictAsync(drMap);
     }
 
     /** {@inheritDoc} */
     @Override public void removeAllConflict(Map drMap) throws IgniteCheckedException {
-        delegate.removeAllConflictAsync(drMap);
+        delegate.get().removeAllConflictAsync(drMap);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> putAllConflictAsync(Map drMap) throws IgniteCheckedException {
-        return delegate.putAllConflictAsync(drMap);
+        return delegate.get().putAllConflictAsync(drMap);
     }
 
     /** {@inheritDoc} */
     @Override public void putAllConflict(Map drMap) throws IgniteCheckedException {
-        delegate.putAllConflict(drMap);
+        delegate.get().putAllConflict(drMap);
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalCache keepBinary() {
-        return delegate.keepBinary();
+        return delegate.get().keepBinary();
     }
 
     /** {@inheritDoc} */
     @Override public IgniteInternalCache cache() {
-        return delegate.cache();
+        return delegate.get().cache();
     }
 
     /** {@inheritDoc} */
     @Override public Iterator iterator() {
-        return delegate.iterator();
+        return delegate.get().iterator();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.java
index 06c6f3d..b7d27fe 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateNonStrictAccessStrategy.java
@@ -109,6 +109,9 @@ public class HibernateNonStrictAccessStrategy extends HibernateAccessStrategyAda
     @Override public boolean afterUpdate(Object key, Object val) {
         WriteContext ctx = writeCtx.get();
 
+        if (log.isDebugEnabled())
+            log.debug("Put after update [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+
         if (ctx != null) {
             ctx.updated(key, val);
 
@@ -127,6 +130,9 @@ public class HibernateNonStrictAccessStrategy extends HibernateAccessStrategyAda
 
     /** {@inheritDoc} */
     @Override public boolean afterInsert(Object key, Object val) {
+        if (log.isDebugEnabled())
+            log.debug("Put after insert [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+
         try {
             cache.put(key, val);
 
@@ -227,4 +233,4 @@ public class HibernateNonStrictAccessStrategy extends HibernateAccessStrategyAda
             return S.toString(WriteContext.class, this);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.java
index a0957fd..07570ba 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadOnlyAccessStrategy.java
@@ -55,7 +55,8 @@ public class HibernateReadOnlyAccessStrategy extends HibernateAccessStrategyAdap
      * @param cache Cache.
      * @param eConverter Exception converter.
      */
-    public HibernateReadOnlyAccessStrategy(Ignite ignite,
+    public HibernateReadOnlyAccessStrategy(
+        Ignite ignite,
         HibernateCacheProxy cache,
         HibernateExceptionConverter eConverter) {
         super(ignite, cache, eConverter);
@@ -68,6 +69,9 @@ public class HibernateReadOnlyAccessStrategy extends HibernateAccessStrategyAdap
 
     /** {@inheritDoc} */
     @Override public boolean afterInsert(Object key, Object val) {
+        if (log.isDebugEnabled())
+            log.debug("Put [cache=" + cache.name() + ", key=" + key + ']');
+
         try {
             cache.put(key, val);
 
@@ -102,4 +106,4 @@ public class HibernateReadOnlyAccessStrategy extends HibernateAccessStrategyAdap
     @Override public boolean afterUpdate(Object key, Object val) {
         throw new UnsupportedOperationException("Updates are not supported for read-only access strategy.");
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
index 491553d..c3fba41 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateReadWriteAccessStrategy.java
@@ -65,7 +65,8 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
      * @param txCtx Thread local instance used to track updates done during one Hibernate transaction.
      * @param eConverter Exception converter.
      */
-    protected HibernateReadWriteAccessStrategy(Ignite ignite,
+    protected HibernateReadWriteAccessStrategy(
+        Ignite ignite,
         HibernateCacheProxy cache,
         ThreadLocal txCtx,
         HibernateExceptionConverter eConverter) {
@@ -78,12 +79,14 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
     @Override public Object get(Object key) {
         boolean success = false;
 
+        Object val = null;
+
         try {
-            Object o = cache.get(key);
+            val = cache.get(key);
 
             success = true;
 
-            return o;
+            return val;
         }
         catch (IgniteCheckedException e) {
             throw convertException(e);
@@ -91,6 +94,11 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled()) {
+                log.debug("Get [cache=" + cache.name() + ", key=" + key + ", val=" + val +
+                    ", success=" + success + ']');
+            }
         }
     }
 
@@ -109,6 +117,11 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled()) {
+                log.debug("Put from load [cache=" + cache.name() + ", key=" + key + ", val=" + val +
+                    ", success=" + success + ']');
+            }
         }
     }
 
@@ -134,6 +147,9 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled())
+                log.debug("Lock [cache=" + cache.name() + ", key=" + key + ", success=" + success + ']');
         }
     }
 
@@ -155,6 +171,9 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled())
+                log.debug("Unlock [cache=" + cache.name() + ", key=" + key + ", success=" + success + ']');
         }
     }
 
@@ -189,6 +208,11 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled()) {
+                log.debug("Put after update [cache=" + cache.name() + ", key=" + key + ", val=" + val +
+                    ", success=" + success + ']');
+            }
         }
     }
 
@@ -214,6 +238,11 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled()) {
+                log.debug("Put after insert [cache=" + cache.name() + ", key=" + key + ", val=" + val +
+                    ", success=" + success + ']');
+            }
         }
     }
 
@@ -235,6 +264,9 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
         finally {
             if (!success)
                 rollbackCurrentTx();
+
+            if (log.isDebugEnabled())
+                log.debug("Remove [cache=" + cache.name() + ", key=" + key + ", success=" + success + ']');
         }
     }
 
@@ -323,4 +355,4 @@ public class HibernateReadWriteAccessStrategy extends HibernateAccessStrategyAda
             return locked.isEmpty();
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.java b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.java
index 6f4935b..259c6a8 100644
--- a/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.java
+++ b/modules/hibernate-core/src/main/java/org/apache/ignite/cache/hibernate/HibernateTransactionalAccessStrategy.java
@@ -68,7 +68,12 @@ public class HibernateTransactionalAccessStrategy extends HibernateAccessStrateg
     /** {@inheritDoc} */
     @Nullable @Override public Object get(Object key) {
         try {
-            return cache.get(key);
+            Object val = cache.get(key);
+
+            if (log.isDebugEnabled())
+                log.debug("Get [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+
+            return val;
         }
         catch (IgniteCheckedException e) {
             throw convertException(e);
@@ -79,6 +84,9 @@ public class HibernateTransactionalAccessStrategy extends HibernateAccessStrateg
     @Override public void putFromLoad(Object key, Object val) {
         try {
             cache.put(key, val);
+
+            if (log.isDebugEnabled())
+                log.debug("Put [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
         }
         catch (IgniteCheckedException e) {
             throw convertException(e);
@@ -98,9 +106,12 @@ public class HibernateTransactionalAccessStrategy extends HibernateAccessStrateg
     /** {@inheritDoc} */
     @Override public boolean update(Object key, Object val) {
         try {
-            cache.put(key, val);
+            boolean res = cache.put(key, val);
 
-            return true;
+            if (log.isDebugEnabled())
+                log.debug("Update [cache=" + cache.name() + ", key=" + key + ", val=" + val + ", res=" + res + ']');
+
+            return res;
         }
         catch (IgniteCheckedException e) {
             throw convertException(e);
@@ -115,9 +126,12 @@ public class HibernateTransactionalAccessStrategy extends HibernateAccessStrateg
     /** {@inheritDoc} */
     @Override public boolean insert(Object key, Object val) {
         try {
-            cache.put(key, val);
+            boolean res = cache.put(key, val);
+
+            if (log.isDebugEnabled())
+                log.debug("Insert [cache=" + cache.name() + ", key=" + key + ", val=" + val + ", res=" + res + ']');
 
-            return true;
+            return res;
         }
         catch (IgniteCheckedException e) {
             throw convertException(e);
@@ -138,4 +152,4 @@ public class HibernateTransactionalAccessStrategy extends HibernateAccessStrateg
             throw convertException(e);
         }
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 2bcdf16..fc71761 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,7 @@
                 <module>modules/geospatial</module>
                 <module>modules/hibernate-4.2</module>
                 <module>modules/hibernate-5.1</module>
+                <module>modules/hibernate-5.3</module>
                 <module>modules/schedule</module>
                 <module>modules/web-console/web-agent</module>
                 <module>modules/yardstick</module>
@@ -245,6 +246,7 @@
             <modules>
                 <module>modules/hibernate-4.2</module>
                 <module>modules/hibernate-5.1</module>
+                <module>modules/hibernate-5.3</module>
                 <module>modules/geospatial</module>
                 <module>modules/schedule</module>
             </modules>


[30/52] [abbrv] ignite git commit: IGNITE-10709 New inspections introduced in 2018+ IntelliJ IDEA version were disabled on TC configuration, unused Suppress removal. - Fixes #5680.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCachePutAllFailoverSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCachePutAllFailoverSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCachePutAllFailoverSelfTest.java
index 644c620..1aa6891 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCachePutAllFailoverSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCachePutAllFailoverSelfTest.java
@@ -108,7 +108,6 @@ public class GridCachePutAllFailoverSelfTest extends GridCommonAbstractTest {
 
     /** Filter to include only worker nodes. */
     private static final IgnitePredicate<ClusterNode> workerNodesFilter = new PN() {
-        @SuppressWarnings("unchecked")
         @Override public boolean apply(ClusterNode n) {
              return "worker".equals(n.attribute("segment"));
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
index b612c6b..0641ebb 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheEntryListenerAbstractTest.java
@@ -639,7 +639,6 @@ public abstract class IgniteCacheEntryListenerAbstractTest extends IgniteCacheAb
      * @param vals Values in cache.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void checkListenerOnStart(Map<Object, Object> vals) throws Exception {
         lsnrCfg = new MutableCacheEntryListenerConfiguration<>(
             new CreateUpdateRemoveExpireListenerFactory(),

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeAbstractTest.java
index 9557810..496af11 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheInvokeAbstractTest.java
@@ -697,7 +697,6 @@ public abstract class IgniteCacheInvokeAbstractTest extends IgniteCacheAbstractT
      * @param resMap Result map.
      * @param exp Expected results.
      */
-    @SuppressWarnings("unchecked")
     private void checkResult(Map resMap, Map<Object, Object> exp) {
         assertNotNull(resMap);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
index 7d62d4f..e281103 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteTxExceptionAbstractSelfTest.java
@@ -402,7 +402,6 @@ public abstract class IgniteTxExceptionAbstractSelfTest extends GridCacheAbstrac
      * @param key Key.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void checkUnlocked(final Integer key) throws Exception {
         TestIndexingSpi.forceFail(false);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
index d950962..a5bc773 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/WithKeepBinaryCacheFullApiTest.java
@@ -806,7 +806,6 @@ public class WithKeepBinaryCacheFullApiTest extends IgniteCacheConfigVariationsA
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("serial")
     @Test
     public void testInvokeAllTx() throws Exception {
         if (!txShouldBeUsed())
@@ -998,7 +997,6 @@ public class WithKeepBinaryCacheFullApiTest extends IgniteCacheConfigVariationsA
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("serial")
     @Test
     public void testInvokeAllAsyncTx() throws Exception {
         if (!txShouldBeUsed())

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
index df8df1f..2a97283 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLateAffinityAssignmentTest.java
@@ -2620,7 +2620,6 @@ public class CacheLateAffinityAssignmentTest extends GridCommonAbstractTest {
      * @throws Exception If failed.
      * @return Affinity assignments.
      */
-    @SuppressWarnings("unchecked")
     private Map<String, List<List<ClusterNode>>> checkAffinity(int expNodes,
         AffinityTopologyVersion topVer,
         boolean expIdeal,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
index 7d43bc3..2fc20c8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteTxCachePrimarySyncTest.java
@@ -1174,7 +1174,6 @@ public class IgniteTxCachePrimarySyncTest extends GridCommonAbstractTest {
      */
     private static class TestStoreFactory implements Factory<CacheStore<Object, Object>> {
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public CacheStore<Object, Object> create() {
             return new TestCacheStore();
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java
index fbe48f2..0ccba59 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridCacheDhtEvictionNearReadersSelfTest.java
@@ -134,7 +134,6 @@ public class GridCacheDhtEvictionNearReadersSelfTest extends GridCommonAbstractT
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override protected void afterTest() throws Exception {
         for (int i = 0; i < GRID_CNT; i++) {
             near(grid(i)).removeAll();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
index 8c7f859..4b94905 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/dht/IgniteCachePutRetryTransactionalSelfTest.java
@@ -298,7 +298,6 @@ public class IgniteCachePutRetryTransactionalSelfTest extends IgniteCachePutRetr
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public Void call() throws Exception {
             String key1 = "key-" + base + "-" + i;
             String key2 = "key-" + base;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
index 0e0bc96..5fcfff1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearMultiNodeSelfTest.java
@@ -207,7 +207,7 @@ public class GridCacheNearMultiNodeSelfTest extends GridCommonAbstractTest {
      * @param g Grid.
      * @return Dht cache.
      */
-    @SuppressWarnings({"unchecked", "TypeMayBeWeakened"})
+    @SuppressWarnings({"unchecked"})
     private GridDhtCacheAdapter<Integer, String> dht(Ignite g) {
         return ((GridNearCacheAdapter)((IgniteKernal)g).internalCache(DEFAULT_CACHE_NAME)).dht();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
index 103abdd..2c6b651 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearOnlyMultiNodeFullApiSelfTest.java
@@ -376,7 +376,6 @@ public class GridCacheNearOnlyMultiNodeFullApiSelfTest extends GridCachePartitio
         storeStgy.removeFromStore(key);
 
         assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicateX() {
-            @SuppressWarnings("unchecked")
             @Override public boolean applyx() throws IgniteCheckedException {
                 try {
                     Integer val = c.get(key);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxMultiNodeSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxMultiNodeSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxMultiNodeSelfTest.java
index f1b2de2..e7a7b31 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxMultiNodeSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCacheNearTxMultiNodeSelfTest.java
@@ -246,7 +246,6 @@ public class GridCacheNearTxMultiNodeSelfTest extends GridCommonAbstractTest {
      * @param g Grid.
      * @param tm Transaction manager.
      */
-    @SuppressWarnings( {"unchecked"})
     private void checkTm(Ignite g, IgniteTxManager tm) {
         Collection<IgniteInternalTx> txs = tm.activeTransactions();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeCounterSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeCounterSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeCounterSelfTest.java
index df0f5af..0e62be8 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeCounterSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/near/GridCachePartitionedMultiNodeCounterSelfTest.java
@@ -67,7 +67,7 @@ import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_REA
 /**
  * Multiple put test.
  */
-@SuppressWarnings({"UnusedAssignment", "TooBroadScope"})
+@SuppressWarnings({"TooBroadScope"})
 @RunWith(JUnit4.class)
 public class GridCachePartitionedMultiNodeCounterSelfTest extends GridCommonAbstractTest {
     /** Debug flag. */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
index a2ec388..2136e2c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionAbstractTest.java
@@ -658,7 +658,6 @@ public abstract class EvictionAbstractTest<T extends EvictionPolicy<?, ?>>
      * @param c Collection.
      * @return String.
      */
-    @SuppressWarnings("unchecked")
     protected static String string(Iterable<? extends Cache.Entry> c) {
         return "[" +
             F.fold(
@@ -956,7 +955,6 @@ public abstract class EvictionAbstractTest<T extends EvictionPolicy<?, ?>>
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public <T> T unwrap(Class<T> clazz) {
             if (clazz.isAssignableFrom(IgniteCache.class))
                 return (T)parent;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
index 47a6910..37bed2d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/eviction/EvictionPolicyFactoryAbstractTest.java
@@ -645,7 +645,6 @@ public abstract class EvictionPolicyFactoryAbstractTest<T extends EvictionPolicy
      * @param i Grid index.
      * @return Policy.
      */
-    @SuppressWarnings({"unchecked"})
     protected T policy(int i) {
         CacheEvictionManager evictMgr = grid(i).cachex(DEFAULT_CACHE_NAME).context().evicts();
 
@@ -658,7 +657,6 @@ public abstract class EvictionPolicyFactoryAbstractTest<T extends EvictionPolicy
      * @param i Grid index.
      * @return Policy.
      */
-    @SuppressWarnings({"unchecked"})
     protected T nearPolicy(int i) {
         CacheEvictionManager evictMgr = grid(i).cachex(DEFAULT_CACHE_NAME).context().near().context().evicts();
 
@@ -686,7 +684,6 @@ public abstract class EvictionPolicyFactoryAbstractTest<T extends EvictionPolicy
      * @param c Collection.
      * @return String.
      */
-    @SuppressWarnings("unchecked")
     protected static String string(Iterable<? extends Cache.Entry> c) {
         return "[" +
             F.fold(
@@ -996,7 +993,6 @@ public abstract class EvictionPolicyFactoryAbstractTest<T extends EvictionPolicy
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public <T> T unwrap(Class<T> clazz) {
             if (clazz.isAssignableFrom(IgniteCache.class))
                 return (T)parent;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java
index 5babd8f..3be8f63 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/local/GridCacheLocalTxMultiThreadedSelfTest.java
@@ -40,7 +40,6 @@ public class GridCacheLocalTxMultiThreadedSelfTest extends IgniteTxMultiThreaded
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"ConstantConditions"})
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/memtracker/PageMemoryTrackerPluginProvider.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/memtracker/PageMemoryTrackerPluginProvider.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/memtracker/PageMemoryTrackerPluginProvider.java
index cad3b02..3bd9f4a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/memtracker/PageMemoryTrackerPluginProvider.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/wal/memtracker/PageMemoryTrackerPluginProvider.java
@@ -76,7 +76,6 @@ public class PageMemoryTrackerPluginProvider implements PluginProvider<PageMemor
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T extends IgnitePlugin> T plugin() {
         return (T)plugin;
     }
@@ -117,7 +116,6 @@ public class PageMemoryTrackerPluginProvider implements PluginProvider<PageMemor
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T createComponent(PluginContext ctx, Class<T> cls) {
         if (plugin != null) {
             if (IgniteWriteAheadLogManager.class.equals(cls))

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousBatchAckTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousBatchAckTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousBatchAckTest.java
index 779b160..1984df3 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousBatchAckTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousBatchAckTest.java
@@ -77,7 +77,6 @@ public class CacheContinuousBatchAckTest extends GridCommonAbstractTest implemen
     protected static final AtomicBoolean filterOn = new AtomicBoolean(false);
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
index 3c190e4..e86f357 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryCounterAbstractTest.java
@@ -82,7 +82,6 @@ public abstract class CacheContinuousQueryCounterAbstractTest extends GridCommon
     private static final String NO_CACHE_IGNITE_INSTANCE_NAME = "noCacheGrid";
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBufferTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBufferTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBufferTest.java
index c86ac65..cfbc024 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBufferTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/query/continuous/CacheContinuousQueryEventBufferTest.java
@@ -35,7 +35,6 @@ import org.junit.runners.JUnit4;
 /**
  *
  */
-@SuppressWarnings("unchecked")
 @RunWith(JUnit4.class)
 public class CacheContinuousQueryEventBufferTest extends GridCommonAbstractTest {
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AbstractDeadlockDetectionTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AbstractDeadlockDetectionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AbstractDeadlockDetectionTest.java
index 05b315d..89369c4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AbstractDeadlockDetectionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/AbstractDeadlockDetectionTest.java
@@ -125,7 +125,6 @@ public abstract class AbstractDeadlockDetectionTest extends GridCommonAbstractTe
      * @param startFrom Start value for keys search.
      * @return Collection of keys for which given node is primary.
      */
-    @SuppressWarnings("unchecked")
     private <T> List<T> findPrimaryKeys(IgniteCache<?, ?> cache, final int cnt, final T startFrom) {
         A.ensure(cnt > 0, "cnt");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockCauseTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockCauseTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockCauseTest.java
index 714154a..4bbbee7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockCauseTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockCauseTest.java
@@ -53,7 +53,6 @@ public class TxDeadlockCauseTest extends GridCommonAbstractTest {
     private CacheConfiguration ccfg;
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetectionUnmasrhalErrorsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetectionUnmasrhalErrorsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetectionUnmasrhalErrorsTest.java
index 5b5dddb..140c31a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetectionUnmasrhalErrorsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxDeadlockDetectionUnmasrhalErrorsTest.java
@@ -59,7 +59,6 @@ public class TxDeadlockDetectionUnmasrhalErrorsTest extends GridCommonAbstractTe
     private static boolean client;
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(gridName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionCrossCacheTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionCrossCacheTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionCrossCacheTest.java
index 5a39755..6647c56 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionCrossCacheTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/transactions/TxPessimisticDeadlockDetectionCrossCacheTest.java
@@ -54,7 +54,6 @@ public class TxPessimisticDeadlockDetectionCrossCacheTest extends GridCommonAbst
     private static final int NODES_CNT = 2;
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/closure/GridClosureProcessorSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/closure/GridClosureProcessorSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/closure/GridClosureProcessorSelfTest.java
index 45289b6..249adbf 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/closure/GridClosureProcessorSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/closure/GridClosureProcessorSelfTest.java
@@ -86,7 +86,6 @@ public class GridClosureProcessorSelfTest extends GridCommonAbstractTest {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"ConstantConditions"})
     @Override protected void beforeTestsStarted() throws Exception {
         assert NODES_CNT >= 2;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
index 0f04afe..c340695 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/igfs/IgfsAbstractBaseSelfTest.java
@@ -930,7 +930,6 @@ public abstract class IgfsAbstractBaseSelfTest extends IgfsCommonAbstractTest {
      * @param igfs IGFS.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     public static void clear(IgniteFileSystem igfs) throws Exception {
         Field workerMapFld = IgfsImpl.class.getDeclaredField("workerMap");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryCrashDetectionSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryCrashDetectionSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryCrashDetectionSelfTest.java
index 4ed1937..7dd3d43 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryCrashDetectionSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/ipc/shmem/IpcSharedMemoryCrashDetectionSelfTest.java
@@ -288,7 +288,7 @@ public class IpcSharedMemoryCrashDetectionSelfTest extends GridCommonAbstractTes
      * @return List of shared memory IDs created while client-server interactions.
      * @throws Exception In case of any exception happen.
      */
-    @SuppressWarnings({"BusyWait", "TypeMayBeWeakened"})
+    @SuppressWarnings({"BusyWait"})
     private Collection<Integer> interactWithClient(IpcSharedMemoryServerEndpoint srv, boolean killClient)
         throws Exception {
         ProcessStartResult clientStartRes = startSharedMemoryTestClient();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/lang/IgniteUuidSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/lang/IgniteUuidSelfTest.java b/modules/core/src/test/java/org/apache/ignite/lang/IgniteUuidSelfTest.java
index 4091e1b..3d0cafb 100644
--- a/modules/core/src/test/java/org/apache/ignite/lang/IgniteUuidSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/lang/IgniteUuidSelfTest.java
@@ -226,7 +226,6 @@ public class IgniteUuidSelfTest extends GridCommonAbstractTest {
      * @throws ClassNotFoundException If failed.
      * @throws IOException If failed.
      */
-    @SuppressWarnings({"unchecked"})
     private <T> T read(byte[] bytes) throws ClassNotFoundException, IOException {
         ByteArrayInputStream bin = new ByteArrayInputStream(bytes);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/loadtests/GridLoadTestStatistics.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/GridLoadTestStatistics.java b/modules/core/src/test/java/org/apache/ignite/loadtests/GridLoadTestStatistics.java
index e2494a6..711fe7d 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/GridLoadTestStatistics.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/GridLoadTestStatistics.java
@@ -74,7 +74,6 @@ public class GridLoadTestStatistics {
      * @param taskTime Task execution time.
      * @return Task count.
      */
-    @SuppressWarnings("unchecked")
     public synchronized long onTaskCompleted(@Nullable ComputeTaskFuture<?> fut, int jobNum, long taskTime) {
         taskCnt++;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/loadtests/GridSingleExecutionTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/GridSingleExecutionTest.java b/modules/core/src/test/java/org/apache/ignite/loadtests/GridSingleExecutionTest.java
index 1c8ce2b..826ac2b 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/GridSingleExecutionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/GridSingleExecutionTest.java
@@ -195,7 +195,6 @@ public final class GridSingleExecutionTest {
      * @return List of configurations.
      * @throws IgniteCheckedException If failed..
      */
-    @SuppressWarnings("unchecked")
     private static Iterable<IgniteConfiguration> getConfigurations(String springCfgPath, String log) throws IgniteCheckedException {
         File path = GridTestUtils.resolveIgnitePath(springCfgPath);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/loadtests/cache/GridCacheAbstractLoadTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/cache/GridCacheAbstractLoadTest.java b/modules/core/src/test/java/org/apache/ignite/loadtests/cache/GridCacheAbstractLoadTest.java
index 5e1725b..f03690a 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/cache/GridCacheAbstractLoadTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/cache/GridCacheAbstractLoadTest.java
@@ -224,7 +224,6 @@ abstract class GridCacheAbstractLoadTest {
     /**
      * @return Write threads count.
      */
-    @SuppressWarnings({"ConstantConditions"})
     protected int writeThreads() {
         int ratio = (int)(threads * writeRatio);
 
@@ -234,7 +233,6 @@ abstract class GridCacheAbstractLoadTest {
     /**
      * @return Read threads count.
      */
-    @SuppressWarnings({"ConstantConditions"})
     protected int readThreads() {
         int ratio = (int)(threads * (1 - writeRatio));
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/loadtests/direct/redeploy/GridSingleSplitsRedeployLoadTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/direct/redeploy/GridSingleSplitsRedeployLoadTest.java b/modules/core/src/test/java/org/apache/ignite/loadtests/direct/redeploy/GridSingleSplitsRedeployLoadTest.java
index 85b1b27..3a20ef3 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/direct/redeploy/GridSingleSplitsRedeployLoadTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/direct/redeploy/GridSingleSplitsRedeployLoadTest.java
@@ -172,7 +172,6 @@ public class GridSingleSplitsRedeployLoadTest extends GridCommonAbstractTest {
      * @return Loaded task class.
      * @throws Exception If failed.
      */
-    @SuppressWarnings({"unchecked"})
     private Class<? extends ComputeTask<?, ?>> loadTaskClass() throws Exception {
         return (Class<? extends ComputeTask<?, ?>>)getExternalClassLoader().loadClass(TASK_NAME);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiClient.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiClient.java b/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiClient.java
index e736888..42f325d 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiClient.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiClient.java
@@ -162,7 +162,7 @@ public class GridDsiClient implements Callable {
      */
     private static void displayReqCount() {
         new Thread(new Runnable() {
-            @SuppressWarnings({"BusyWait", "InfiniteLoopStatement"})
+            @SuppressWarnings({"BusyWait"})
             @Override public void run() {
                 int interval = 30;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiPerfJob.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiPerfJob.java b/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiPerfJob.java
index 8c8fc74..cc1984c 100644
--- a/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiPerfJob.java
+++ b/modules/core/src/test/java/org/apache/ignite/loadtests/dsi/GridDsiPerfJob.java
@@ -341,7 +341,6 @@ public class GridDsiPerfJob extends ComputeJobAdapter {
      * @param key Key.
      * @return Object.
      */
-    @SuppressWarnings("ConstantConditions")
     private <T> Object get(Object key) {
         return ignite.cache(cacheName).get(key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
index 10100e2..fbbb763 100644
--- a/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/marshaller/GridMarshallerAbstractTest.java
@@ -548,7 +548,6 @@ public abstract class GridMarshallerAbstractTest extends GridCommonAbstractTest
      *
      * @throws Exception If test failed.
      */
-    @SuppressWarnings("unchecked")
     @Test
     public void testNodeLocalMarshalling() throws Exception {
         ConcurrentMap<String, String> loc = grid().cluster().nodeLocalMap();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/messaging/GridMessagingSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/messaging/GridMessagingSelfTest.java b/modules/core/src/test/java/org/apache/ignite/messaging/GridMessagingSelfTest.java
index 1c03310..6a3f3b7 100644
--- a/modules/core/src/test/java/org/apache/ignite/messaging/GridMessagingSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/messaging/GridMessagingSelfTest.java
@@ -666,7 +666,6 @@ public class GridMessagingSelfTest extends GridCommonAbstractTest implements Ser
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("TooBroadScope")
     @Test
     public void testStopRemoteListen() throws Exception {
         final AtomicInteger msgCnt1 = new AtomicInteger();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/p2p/GridAbstractMultinodeRedeployTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/p2p/GridAbstractMultinodeRedeployTest.java b/modules/core/src/test/java/org/apache/ignite/p2p/GridAbstractMultinodeRedeployTest.java
index b0ac19b..0bdb660 100644
--- a/modules/core/src/test/java/org/apache/ignite/p2p/GridAbstractMultinodeRedeployTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/p2p/GridAbstractMultinodeRedeployTest.java
@@ -100,7 +100,6 @@ abstract class GridAbstractMultinodeRedeployTest extends GridCommonAbstractTest
      * @return Loaded class.
      * @throws Exception Thrown if any exception occurs.
      */
-    @SuppressWarnings({"unchecked"})
     private Class<? extends ComputeTask<int[], ?>> loadTaskClass() throws Exception {
         return (Class<? extends ComputeTask<int[], ?>>)new GridTestExternalClassLoader(new URL[]{
             new URL(GridTestProperties.getProperty("p2p.uri.cls"))}).loadClass(TASK_NAME);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PDoubleDeploymentSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PDoubleDeploymentSelfTest.java b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PDoubleDeploymentSelfTest.java
index 4358f02..77aefbf 100644
--- a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PDoubleDeploymentSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PDoubleDeploymentSelfTest.java
@@ -71,7 +71,6 @@ public class GridP2PDoubleDeploymentSelfTest extends GridCommonAbstractTest {
      * @param depMode deployment mode.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void processTestBothNodesDeploy(DeploymentMode depMode) throws Exception {
         try {
             this.depMode = depMode;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PRemoteClassLoadersSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PRemoteClassLoadersSelfTest.java b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PRemoteClassLoadersSelfTest.java
index f761e25..17114b0 100644
--- a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PRemoteClassLoadersSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PRemoteClassLoadersSelfTest.java
@@ -72,7 +72,6 @@ public class GridP2PRemoteClassLoadersSelfTest extends GridCommonAbstractTest {
      * @param depMode deployment mode.
      * @throws Exception If failed..
      */
-    @SuppressWarnings("unchecked")
     private void processTestSameRemoteClassLoader(DeploymentMode depMode) throws Exception {
         try {
             this.depMode = depMode;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PTimeoutSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PTimeoutSelfTest.java b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PTimeoutSelfTest.java
index 0cd4e7b..74a1efe 100644
--- a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PTimeoutSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PTimeoutSelfTest.java
@@ -99,7 +99,6 @@ public class GridP2PTimeoutSelfTest extends GridCommonAbstractTest {
      * @param depMode deployment mode.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void processFilterTest(DeploymentMode depMode) throws Exception {
         this.depMode = depMode;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PUndeploySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PUndeploySelfTest.java b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PUndeploySelfTest.java
index 42eae7d..6bb4e24 100644
--- a/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PUndeploySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/p2p/GridP2PUndeploySelfTest.java
@@ -71,7 +71,6 @@ public class GridP2PUndeploySelfTest extends GridCommonAbstractTest {
      * @param depMode deployment mode.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void processTestUndeployLocalTasks(DeploymentMode depMode) throws Exception {
         try {
             this.depMode = depMode;
@@ -123,7 +122,6 @@ public class GridP2PUndeploySelfTest extends GridCommonAbstractTest {
      * @param depMode deployment mode.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void processTestUndeployP2PTasks(DeploymentMode depMode) throws Exception {
         try {
             this.depMode = depMode;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/collision/GridTestCollisionTaskSession.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/collision/GridTestCollisionTaskSession.java b/modules/core/src/test/java/org/apache/ignite/spi/collision/GridTestCollisionTaskSession.java
index 09f277f..5115fa5 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/collision/GridTestCollisionTaskSession.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/collision/GridTestCollisionTaskSession.java
@@ -169,7 +169,6 @@ public class GridTestCollisionTaskSession implements ComputeTaskSession {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> V getAttribute(K key) {
         if (priAttrKey != null && priAttrKey.equals(key))
             return (V)pri;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/collision/priorityqueue/GridPriorityQueueCollisionSpiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/collision/priorityqueue/GridPriorityQueueCollisionSpiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/collision/priorityqueue/GridPriorityQueueCollisionSpiSelfTest.java
index 4f2a3fe..c74f738 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/collision/priorityqueue/GridPriorityQueueCollisionSpiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/collision/priorityqueue/GridPriorityQueueCollisionSpiSelfTest.java
@@ -299,7 +299,6 @@ public class GridPriorityQueueCollisionSpiSelfTest extends GridSpiAbstractTest<P
             if (((GridTestCollisionTaskSession)ctx.getTaskSession()).getPriority() >= 8) {
                 ((GridTestCollisionJobContext)ctx).setTaskSession(new GridTestCollisionTaskSession(100,
                     DFLT_PRIORITY_ATTRIBUTE_KEY) {
-                    @SuppressWarnings("unchecked")
                     @Override public <K, V> V getAttribute(K key) {
                         if (getPriorityAttributeKey() != null && getPriorityAttributeKey().equals(key))
                             return (V)"wrong-attr";
@@ -309,7 +308,7 @@ public class GridPriorityQueueCollisionSpiSelfTest extends GridSpiAbstractTest<P
                 });
 
                 ((GridTestCollisionJobContext)ctx).setJobContext(new GridTestJobContext() {
-                    @SuppressWarnings({"unchecked", "RedundantTypeArguments"})
+                    @SuppressWarnings({"RedundantTypeArguments"})
                     @Override public <K, V> V getAttribute(K key) {
                         if (DFLT_JOB_PRIORITY_ATTRIBUTE_KEY.equals(key))
                             return (V)"wrong-attr";

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
index 22d1075..4b90c91 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoveryAckSelfTest.java
@@ -144,7 +144,6 @@ public class GridTcpCommunicationSpiRecoveryAckSelfTest<T extends CommunicationS
      * @param msgPerIter Messages per iteration.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void checkAck(int ackCnt, int idleTimeout, int msgPerIter) throws Exception {
         createSpis(ackCnt, idleTimeout, TcpCommunicationSpi.DFLT_MSG_QUEUE_LIMIT);
 
@@ -278,7 +277,6 @@ public class GridTcpCommunicationSpiRecoveryAckSelfTest<T extends CommunicationS
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void checkOverflow() throws Exception {
         TcpCommunicationSpi spi0 = spis.get(0);
         TcpCommunicationSpi spi1 = spis.get(1);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoverySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoverySelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoverySelfTest.java
index 3232ba3..9e49107 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoverySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/GridTcpCommunicationSpiRecoverySelfTest.java
@@ -62,7 +62,6 @@ import org.junit.runners.JUnit4;
 /**
  *
  */
-@SuppressWarnings("unchecked")
 @GridSpiTest(spi = TcpCommunicationSpi.class, group = "Communication SPI")
 @RunWith(JUnit4.class)
 public class GridTcpCommunicationSpiRecoverySelfTest<T extends CommunicationSpi> extends GridSpiAbstractTest<T> {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
index e304561..49211cb 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationRecoveryAckClosureSelfTest.java
@@ -146,7 +146,6 @@ public class IgniteTcpCommunicationRecoveryAckClosureSelfTest<T extends Communic
      * @param msgPerIter Messages per iteration.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void checkAck(int ackCnt, int idleTimeout, int msgPerIter) throws Exception {
         createSpis(ackCnt, idleTimeout, TcpCommunicationSpi.DFLT_MSG_QUEUE_LIMIT);
 
@@ -297,7 +296,6 @@ public class IgniteTcpCommunicationRecoveryAckClosureSelfTest<T extends Communic
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void checkOverflow() throws Exception {
         TcpCommunicationSpi spi0 = spis.get(0);
         TcpCommunicationSpi spi1 = spis.get(1);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
index b52f00b..5c4a5c0 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/discovery/tcp/TcpClientDiscoverySpiSelfTest.java
@@ -2371,7 +2371,6 @@ public class TcpClientDiscoverySpiSelfTest extends GridCommonAbstractTest {
      * @param ignite Grid.
      * @param expCnt Expected nodes count.
      */
-    @SuppressWarnings("TypeMayBeWeakened")
     private void checkRemoteNodes(Ignite ignite, int expCnt) {
         Collection<ClusterNode> nodes = ignite.cluster().forRemotes().nodes();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/failover/always/GridAlwaysFailoverSpiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/failover/always/GridAlwaysFailoverSpiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/failover/always/GridAlwaysFailoverSpiSelfTest.java
index c22a277..e1d488c 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/failover/always/GridAlwaysFailoverSpiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/failover/always/GridAlwaysFailoverSpiSelfTest.java
@@ -117,7 +117,6 @@ public class GridAlwaysFailoverSpiSelfTest extends GridSpiAbstractTest<AlwaysFai
      * @param res Job result.
      * @param cnt Failure count.
      */
-    @SuppressWarnings("unchecked")
     private void checkFailedNodes(ComputeJobResult res, int cnt) {
         Collection<UUID> failedNodes =
             (Collection<UUID>)res.getJobContext().getAttribute(FAILED_NODE_LIST_ATTR);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/spi/failover/jobstealing/GridJobStealingFailoverSpiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/failover/jobstealing/GridJobStealingFailoverSpiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/spi/failover/jobstealing/GridJobStealingFailoverSpiSelfTest.java
index 4f7bc31..13aa5ec 100644
--- a/modules/core/src/test/java/org/apache/ignite/spi/failover/jobstealing/GridJobStealingFailoverSpiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/spi/failover/jobstealing/GridJobStealingFailoverSpiSelfTest.java
@@ -228,7 +228,6 @@ public class GridJobStealingFailoverSpiSelfTest extends GridSpiAbstractTest<JobS
      * @param failed Failed node.
      * @param failCnt Failover count.
      */
-    @SuppressWarnings("unchecked")
     private void checkAttributes(ComputeJobContext ctx, ClusterNode failed, int failCnt) {
         assert (Integer)ctx.getAttribute(FAILOVER_ATTEMPT_COUNT_ATTR) == failCnt;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/startup/GridVmNodesStarter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/startup/GridVmNodesStarter.java b/modules/core/src/test/java/org/apache/ignite/startup/GridVmNodesStarter.java
index b2f2f02..ca68577 100644
--- a/modules/core/src/test/java/org/apache/ignite/startup/GridVmNodesStarter.java
+++ b/modules/core/src/test/java/org/apache/ignite/startup/GridVmNodesStarter.java
@@ -192,7 +192,6 @@ public final class GridVmNodesStarter {
      * @return List of configurations.
      * @throws IgniteCheckedException If an error occurs.
      */
-    @SuppressWarnings("unchecked")
     private static Iterable<IgniteConfiguration> getConfigurations(String springCfgPath)
         throws IgniteCheckedException {
         File path = GridTestUtils.resolveIgnitePath(springCfgPath);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java
index 1b38857..da43ded 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridSpiTestContext.java
@@ -484,7 +484,6 @@ public class GridSpiTestContext implements IgniteSpiContext {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public <K, V> V putIfAbsent(String cacheName, K key, V val, long ttl) {
         V v = get(cacheName, key);
 
@@ -673,7 +672,6 @@ public class GridSpiTestContext implements IgniteSpiContext {
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("ConstantConditions")
         @Override public void onMessage(UUID nodeId, Object msg, byte plc) {
             GridIoUserMessage ioMsg = (GridIoUserMessage)msg;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java
index 4f23825..f7d627c 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestNode.java
@@ -130,7 +130,7 @@ public class GridTestNode extends GridMetadataAwareAdapter implements ClusterNod
     }
 
     /** {@inheritDoc} */
-    @Override @SuppressWarnings("unchecked")
+    @Override
     public <T> T attribute(String name) {
         assert name != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
index 544e8f0..d1b0cbe 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/GridTestUtils.java
@@ -564,7 +564,6 @@ public final class GridTestUtils {
      * @param it Input iterable of elements.
      * @param ps Array of predicates (by number of elements in iterable).
      */
-    @SuppressWarnings("ConstantConditions")
     public static <T> void assertOneToOne(Iterable<T> it, IgnitePredicate<T>... ps) {
         Collection<IgnitePredicate<T>> ps0 = new ArrayList<>(Arrays.asList(ps));
         Collection<T2<IgnitePredicate<T>, T>> passed = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariationsTestSuiteBuilder.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariationsTestSuiteBuilder.java b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariationsTestSuiteBuilder.java
index 4a60671..a322ca1 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariationsTestSuiteBuilder.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/ConfigVariationsTestSuiteBuilder.java
@@ -34,12 +34,10 @@ public class ConfigVariationsTestSuiteBuilder {
     private final TestSuite suite;
 
     /** */
-    @SuppressWarnings("unchecked")
     private ConfigParameter<IgniteConfiguration>[][] igniteParams =
         ConfigVariations.igniteBasicSet();
 
     /** */
-    @SuppressWarnings("unchecked")
     private ConfigParameter<CacheConfiguration>[][] cacheParams;
 
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/Parameters.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/Parameters.java b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/Parameters.java
index 27c0a48..69bf209 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/Parameters.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/configvariations/Parameters.java
@@ -48,7 +48,6 @@ public class Parameters {
     /**
      * @return Array of configuration processors for given enum.
      */
-    @SuppressWarnings("unchecked")
     public static <T> ConfigParameter<T>[] enumParameters(String mtdName, Class<?> enumCls) {
         return enumParameters(false, mtdName, enumCls);
     }
@@ -56,7 +55,6 @@ public class Parameters {
     /**
      * @return Array of configuration processors for given enum.
      */
-    @SuppressWarnings("unchecked")
     public static <T> ConfigParameter<T>[] enumParameters(boolean withNull, String mtdName, Class<?> enumCls) {
         return parameters0(mtdName, withNull, enumCls.getEnumConstants());
     }
@@ -113,7 +111,6 @@ public class Parameters {
     /**
      * @return Array of configuration processors for given enum.
      */
-    @SuppressWarnings("unchecked")
     public static <T> ConfigParameter<T>[] booleanParameters(String mtdName) {
         return parameters0(mtdName, false, new Boolean[] {true, false});
     }
@@ -121,7 +118,6 @@ public class Parameters {
     /**
      * @return Array of configuration processors for given enum.
      */
-    @SuppressWarnings("unchecked")
     public static <T> ConfigParameter<T>[] booleanParameters(boolean withNull, String mtdName) {
         return parameters0(mtdName, withNull, new Boolean[] {true, false});
     }
@@ -172,7 +168,6 @@ public class Parameters {
     /**
      * Reflection configuration applier.
      */
-    @SuppressWarnings("serial")
     private static class ReflectionParameter<T> implements ConfigParameter<T> {
         /** Classes of marameters cache. */
         private static final ConcurrentMap<T2<Class, String>, Class> paramClassesCache = new ConcurrentHashMap();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index 241211c..2b083ca 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -1142,7 +1142,6 @@ public abstract class GridAbstractTest extends TestCase {
      * @param igniteInstanceName Ignite instance name.
      * @param cancel Cancel flag.
      */
-    @SuppressWarnings({"deprecation"})
     protected void stopGrid(@Nullable String igniteInstanceName, boolean cancel) {
         stopGrid(igniteInstanceName, cancel, true);
     }
@@ -1152,7 +1151,6 @@ public abstract class GridAbstractTest extends TestCase {
      * @param cancel Cancel flag.
      * @param awaitTop Await topology change flag.
      */
-    @SuppressWarnings({"deprecation"})
     protected void stopGrid(@Nullable String igniteInstanceName, boolean cancel, boolean awaitTop) {
         try {
             IgniteEx ignite = grid(igniteInstanceName);
@@ -1624,7 +1622,7 @@ public abstract class GridAbstractTest extends TestCase {
      * @param marshaller Marshaller to get checkpoint path for.
      * @return Path for specific marshaller.
      */
-    @SuppressWarnings({"IfMayBeConditional", "deprecation"})
+    @SuppressWarnings({"IfMayBeConditional"})
     protected String getDefaultCheckpointPath(Marshaller marshaller) {
         if (marshaller instanceof JdkMarshaller)
             return SharedFsCheckpointSpi.DFLT_DIR_PATH + "/jdk/";

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteCacheConfigVariationsAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteCacheConfigVariationsAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteCacheConfigVariationsAbstractTest.java
index fa287bd..c1a408b 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteCacheConfigVariationsAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteCacheConfigVariationsAbstractTest.java
@@ -436,7 +436,6 @@ public abstract class IgniteCacheConfigVariationsAbstractTest extends IgniteConf
     /**
      * @return Default cache instance.
      */
-    @SuppressWarnings({"unchecked"})
     @Override protected <K, V> IgniteCache<K, V> jcache() {
         return jcache(testedNodeIdx);
     }
@@ -466,7 +465,6 @@ public abstract class IgniteCacheConfigVariationsAbstractTest extends IgniteConf
      * @param idx Index of grid.
      * @return Default cache.
      */
-    @SuppressWarnings({"unchecked"})
     @Override protected <K, V> IgniteCache<K, V> jcache(int idx) {
         return ignite(idx).cache(cacheName());
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
index 59e2994..156f99b 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/IgniteTestResources.java
@@ -242,7 +242,6 @@ public class IgniteTestResources {
      * @return Marshaller.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public static synchronized Marshaller getMarshaller() throws IgniteCheckedException {
         String marshallerName =
             System.getProperty(MARSH_CLASS_NAME, GridTestProperties.getProperty(GridTestProperties.MARSH_CLASS_NAME));

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestCacheSession.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestCacheSession.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestCacheSession.java
index 6f7c9b3..874559f 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestCacheSession.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestCacheSession.java
@@ -66,13 +66,11 @@ public class TestCacheSession implements CacheStoreSession {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T attachment() {
         return (T)attachment;
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> Map<K, V> properties() {
         if (props == null)
             props = U.newHashMap(1);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java
index 8e0ae2d..5952453 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/cache/TestThreadLocalCacheSession.java
@@ -60,7 +60,6 @@ public class TestThreadLocalCacheSession implements CacheStoreSession {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T attachment() {
         TestCacheSession ses = sesHolder.get();
 
@@ -68,7 +67,6 @@ public class TestThreadLocalCacheSession implements CacheStoreSession {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> Map<K, V> properties() {
         TestCacheSession ses = sesHolder.get();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
index e32617d..54cb358 100755
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
@@ -411,7 +411,6 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
      * @param replaceExistingValues Replace existing values.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     protected static <K> void loadAll(Cache<K, ?> cache, final Set<K> keys, final boolean replaceExistingValues)
         throws Exception {
         IgniteCache<K, Object> cacheCp = (IgniteCache<K, Object>)cache;
@@ -1079,7 +1078,6 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
      * @param startFrom Start value for keys search.
      * @return Collection of keys for which given cache is primary.
      */
-    @SuppressWarnings("unchecked")
     protected List<Integer> primaryKeys(IgniteCache<?, ?> cache, final int cnt, final int startFrom) {
         return findKeys(cache, cnt, startFrom, 0);
     }
@@ -1090,7 +1088,6 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
      * @param startFrom Start value for keys search.
      * @return Collection of keys for which given cache is primary.
      */
-    @SuppressWarnings("unchecked")
     protected List<Integer> findKeys(IgniteCache<?, ?> cache, final int cnt, final int startFrom, final int type) {
         assert cnt > 0 : cnt;
 
@@ -1171,7 +1168,6 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
      * @param startFrom Start value for keys search.
      * @return Collection of keys for which given cache is backup.
      */
-    @SuppressWarnings("unchecked")
     protected List<Integer> backupKeys(IgniteCache<?, ?> cache, int cnt, int startFrom) {
         return findKeys(cache, cnt, startFrom, 1);
     }
@@ -1183,7 +1179,6 @@ public abstract class GridCommonAbstractTest extends GridAbstractTest {
      * @return Collection of keys for which given cache is neither primary nor backup.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     protected List<Integer> nearKeys(IgniteCache<?, ?> cache, int cnt, int startFrom)
         throws IgniteCheckedException {
         return findKeys(cache, cnt, startFrom, 2);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java
index 18a2f7c..f9432ed 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/multijvm/IgniteCacheProcessProxy.java
@@ -591,7 +591,6 @@ public class IgniteCacheProcessProxy<K, V> implements IgniteCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> clazz) {
         if (Ignite.class.equals(clazz))
             return (T)igniteProxy;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
index 52aace7..4d33367 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/spi/GridSpiAbstractTest.java
@@ -101,7 +101,6 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
     /**
      * @return Test data.
      */
-    @SuppressWarnings({"unchecked"})
     protected TestData<T> getTestData() throws IgniteCheckedException {
         TestData<T> data = (TestData<T>)tests.get(getClass());
 
@@ -174,7 +173,6 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings({"unchecked"})
     protected final void spiStart() throws Exception {
         GridSpiTest spiTest = GridTestUtils.getAnnotation(getClass(), GridSpiTest.class);
 
@@ -453,7 +451,6 @@ public abstract class GridSpiAbstractTest<T extends IgniteSpi> extends GridAbstr
      *
      * @return Class of the SPI implementation.
      */
-    @SuppressWarnings({"unchecked"})
     protected final Class<? extends T> getSpiClass() {
         GridSpiTest spiTest = GridTestUtils.getAnnotation(getClass(), GridSpiTest.class);
 


[42/52] [abbrv] ignite git commit: IGNITE-10262: MVCC TX: Client operation may hangs if all data nodes left the grid. This closes #5693.

Posted by sb...@apache.org.
IGNITE-10262: MVCC TX: Client operation may hangs if all data nodes left the grid. This closes #5693.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7b6e17b2
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7b6e17b2
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7b6e17b2

Branch: refs/heads/ignite-627
Commit: 7b6e17b216d82e69610da0432b1b37b70a5b8492
Parents: 664fb93
Author: rkondakov <ko...@mail.ru>
Authored: Wed Dec 19 15:50:31 2018 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Wed Dec 19 15:50:31 2018 +0300

----------------------------------------------------------------------
 .../near/GridNearTxEnlistFuture.java            |   3 +-
 .../near/GridNearTxQueryEnlistFuture.java       |   5 +
 .../GridNearTxQueryResultsEnlistFuture.java     |   3 +-
 .../IgniteClientCacheStartFailoverTest.java     |   4 +-
 .../processors/query/h2/IgniteH2Indexing.java   |  12 +-
 ...eMvccAbstractSqlCoordinatorFailoverTest.java | 161 +++++++++++++++++++
 6 files changed, 181 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7b6e17b2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
index 789cd3c..8cbe93e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
@@ -31,6 +31,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
+import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
 import org.apache.ignite.internal.processors.cache.CacheEntryPredicate;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.GridCacheMessage;
@@ -217,7 +218,7 @@ public class GridNearTxEnlistFuture extends GridNearTxAbstractEnlistFuture<GridC
                 ClusterNode node = cctx.affinity().primaryByKey(key, topVer);
 
                 if (node == null)
-                    throw new ClusterTopologyCheckedException("Failed to get primary node " +
+                    throw new ClusterTopologyServerNotFoundException("Failed to get primary node " +
                         "[topVer=" + topVer + ", key=" + key + ']');
 
                 tx.markQueryEnlisted(null);

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b6e17b2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
index 030a432..245ef39 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryEnlistFuture.java
@@ -23,6 +23,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
+import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
 import org.apache.ignite.internal.processors.affinity.AffinityAssignment;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.GridCacheMessage;
@@ -119,6 +120,10 @@ public class GridNearTxQueryEnlistFuture extends GridNearTxQueryAbstractEnlistFu
                     updateMappings(pNode);
             }
 
+            if (primary.isEmpty())
+                throw new ClusterTopologyServerNotFoundException("Failed to find data nodes for cache (all partition " +
+                    "nodes left the grid).");
+
             boolean locallyMapped = primary.contains(cctx.localNode());
 
             if (locallyMapped)

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b6e17b2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
index 316aae5..e4d74f2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxQueryResultsEnlistFuture.java
@@ -31,6 +31,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteInternalFuture;
 import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
+import org.apache.ignite.internal.cluster.ClusterTopologyServerNotFoundException;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
 import org.apache.ignite.internal.processors.cache.GridCacheMessage;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
@@ -203,7 +204,7 @@ public class GridNearTxQueryResultsEnlistFuture extends GridNearTxQueryAbstractE
                 ClusterNode node = cctx.affinity().primaryByPartition(key.partition(), topVer);
 
                 if (node == null)
-                    throw new ClusterTopologyCheckedException("Failed to get primary node " +
+                    throw new ClusterTopologyServerNotFoundException("Failed to get primary node " +
                         "[topVer=" + topVer + ", key=" + key + ']');
 
                 if (!sequential)

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b6e17b2/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheStartFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheStartFailoverTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheStartFailoverTest.java
index de18c44..69df748 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheStartFailoverTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheStartFailoverTest.java
@@ -41,8 +41,8 @@ import org.apache.ignite.internal.IgniteNodeAttributes;
 import org.apache.ignite.internal.TestRecordingCommunicationSpi;
 import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
 import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentResponse;
-import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology;
 import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage;
+import org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtPartitionTopology;
 import org.apache.ignite.internal.util.lang.GridAbsPredicate;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiPredicate;
@@ -192,8 +192,6 @@ public class IgniteClientCacheStartFailoverTest extends GridCommonAbstractTest {
      */
     @Test
     public void testClientStartLastServerFailsMvccTx() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-10262");
-
         clientStartLastServerFails(TRANSACTIONAL_SNAPSHOT);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b6e17b2/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
index c2f3f89..29f39b9 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/IgniteH2Indexing.java
@@ -1140,8 +1140,16 @@ public class IgniteH2Indexing implements GridQueryIndexing {
             return new Iterable<List<?>>() {
                 @SuppressWarnings("NullableProblems")
                 @Override public Iterator<List<?>> iterator() {
-                    return rdcQryExec.query(schemaName, qry, keepCacheObj, enforceJoinOrder, opTimeout,
-                        cancel, params, parts, lazy, tracker);
+                    try {
+                        return rdcQryExec.query(schemaName, qry, keepCacheObj, enforceJoinOrder, opTimeout,
+                            cancel, params, parts, lazy, tracker);
+                    }
+                    catch (Throwable e) {
+                        if (tracker != null)
+                            tracker.onDone();
+
+                        throw e;
+                    }
                 }
             };
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7b6e17b2/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractSqlCoordinatorFailoverTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractSqlCoordinatorFailoverTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractSqlCoordinatorFailoverTest.java
index b14dc07..e986f44 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractSqlCoordinatorFailoverTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccAbstractSqlCoordinatorFailoverTest.java
@@ -17,10 +17,26 @@
 
 package org.apache.ignite.internal.processors.cache.mvcc;
 
+import java.util.concurrent.Callable;
+import javax.cache.CacheException;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.cache.CacheServerNotFoundException;
+import org.apache.ignite.cache.query.SqlFieldsQuery;
+import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.IgniteNodeAttributes;
+import org.apache.ignite.internal.TestRecordingCommunicationSpi;
+import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtAffinityAssignmentResponse;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.testframework.GridTestUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
 import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.ReadMode.SCAN;
 import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.ReadMode.SQL;
 import static org.apache.ignite.internal.processors.cache.mvcc.CacheMvccAbstractTest.WriteMode.DML;
@@ -152,4 +168,149 @@ public abstract class CacheMvccAbstractSqlCoordinatorFailoverTest extends CacheM
     public void testCoordinatorChangeActiveQueryClientFails_SimpleScan() throws Exception {
         checkCoordinatorChangeActiveQueryClientFails_Simple(new InitIndexing(Integer.class, Integer.class), SCAN, DML);
     }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testStartLastServerFails() throws Exception {
+        testSpi = true;
+
+        startGrids(3);
+
+        CacheConfiguration<Object, Object> cfg = cacheConfiguration(cacheMode(), FULL_SYNC, 0, DFLT_PARTITION_COUNT)
+            .setIndexedTypes(Integer.class, Integer.class);
+
+        cfg.setNodeFilter(new TestNodeFilter(getTestIgniteInstanceName(1)));
+
+        Ignite srv1 = ignite(1);
+
+        srv1.createCache(cfg);
+
+        client = true;
+
+        final Ignite c = startGrid(3);
+
+        client = false;
+
+        TestRecordingCommunicationSpi.spi(srv1).blockMessages(GridDhtAffinityAssignmentResponse.class, c.name());
+
+        IgniteInternalFuture<?> fut = GridTestUtils.runAsync(new Callable<Void>() {
+            @Override public Void call() throws Exception {
+                c.cache(DEFAULT_CACHE_NAME);
+
+                return null;
+            }
+        }, "start-cache");
+
+        U.sleep(1000);
+
+        assertFalse(fut.isDone());
+
+        stopGrid(1);
+
+        fut.get();
+
+        final IgniteCache<Object, Object> clientCache = c.cache(DEFAULT_CACHE_NAME);
+
+        for (int i = 0; i < 10; i++) {
+            final int k = i;
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.get(k);
+
+                    return null;
+                }
+            }, CacheServerNotFoundException.class, null);
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.put(k, k);
+
+                    return null;
+                }
+            }, CacheServerNotFoundException.class, null);
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.remove(k);
+
+                    return null;
+                }
+            }, CacheServerNotFoundException.class, null);
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.query(new SqlFieldsQuery("SELECT * FROM INTEGER")).getAll();
+
+                    return null;
+                }
+            }, CacheException.class, "Failed to find data nodes for cache"); // TODO IGNITE-10377 should be CacheServerNotFoundException.
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.query(new SqlFieldsQuery("SELECT * FROM INTEGER ORDER BY _val")).getAll();
+
+                    return null;
+                }
+            }, CacheException.class, "Failed to find data nodes for cache"); // TODO IGNITE-10377 should be CacheServerNotFoundException.
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.query(new SqlFieldsQuery("DELETE FROM Integer WHERE 1 = 1")).getAll();
+
+                    return null;
+                }
+            }, CacheException.class, "Failed to find data nodes for cache"); // TODO IGNITE-10377 should be CacheServerNotFoundException.
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.query(new SqlFieldsQuery("INSERT INTO Integer (_key, _val) VALUES (1, 2)")).getAll();
+
+                    return null;
+                }
+            }, CacheException.class, "Failed to get primary node"); // TODO IGNITE-10377 should be CacheServerNotFoundException.
+
+            GridTestUtils.assertThrows(log, new Callable<Void>() {
+                @Override public Void call() throws Exception {
+                    clientCache.query(new SqlFieldsQuery("UPDATE Integer SET _val=42 WHERE _key IN (SELECT DISTINCT _val FROM INTEGER)")).getAll();
+
+                    return null;
+                }
+            }, CacheException.class, "Failed to find data nodes for cache"); // TODO IGNITE-10377 should be CacheServerNotFoundException.
+        }
+
+        startGrid(1);
+
+        awaitPartitionMapExchange();
+
+        for (int i = 0; i < 100; i++) {
+            assertNull(clientCache.get(i));
+
+            clientCache.put(i, i);
+
+            assertEquals(i, clientCache.get(i));
+        }
+    }
+
+    /**
+     *
+     */
+    private static class TestNodeFilter implements IgnitePredicate<ClusterNode> {
+        /** */
+        private final String includeName;
+
+        /**
+         * @param includeName Node to include.
+         */
+        public TestNodeFilter(String includeName) {
+            this.includeName = includeName;
+        }
+
+        /** {@inheritDoc} */
+        @Override public boolean apply(ClusterNode node) {
+            return includeName.equals(node.attribute(IgniteNodeAttributes.ATTR_IGNITE_INSTANCE_NAME));
+        }
+    }
 }


[34/52] [abbrv] ignite git commit: IGNITE-10709 New inspections introduced in 2018+ IntelliJ IDEA version were disabled on TC configuration, unused Suppress removal. - Fixes #5680.

Posted by sb...@apache.org.
IGNITE-10709 New inspections introduced in 2018+ IntelliJ IDEA version were disabled on TC configuration, unused Suppress removal. - Fixes #5680.

Signed-off-by: Dmitriy Pavlov <dp...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ad9d5610
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ad9d5610
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ad9d5610

Branch: refs/heads/ignite-627
Commit: ad9d5610e9f2f72a42d50630949293f3120bebc6
Parents: c48f3bc
Author: Maxim Muzafarov <ma...@gmail.com>
Authored: Tue Dec 18 19:21:40 2018 +0300
Committer: Dmitriy Pavlov <dp...@apache.org>
Committed: Tue Dec 18 19:23:56 2018 +0300

----------------------------------------------------------------------
 idea/ignite_inspections_teamcity.xml                | 13 +++++++++++++
 .../org/apache/ignite/IgniteJdbcThinDataSource.java |  1 -
 .../java/org/apache/ignite/cache/CacheManager.java  |  1 -
 .../apache/ignite/cache/affinity/AffinityKey.java   |  1 -
 .../cache/eviction/fifo/FifoEvictionPolicy.java     |  1 -
 .../cache/eviction/lru/LruEvictionPolicy.java       |  1 -
 .../cache/eviction/sorted/SortedEvictionPolicy.java |  4 ----
 .../apache/ignite/compute/ComputeJobAdapter.java    |  1 -
 .../ignite/configuration/CacheConfiguration.java    |  4 ----
 .../java/org/apache/ignite/events/CacheEvent.java   |  1 -
 .../local/LocalIgfsSecondaryFileSystem.java         |  1 -
 .../apache/ignite/internal/AsyncSupportAdapter.java |  2 --
 .../apache/ignite/internal/GridJobContextImpl.java  |  1 -
 .../ignite/internal/GridKernalContextImpl.java      |  2 --
 .../apache/ignite/internal/GridTaskSessionImpl.java |  3 ---
 .../apache/ignite/internal/IgniteComponentType.java |  2 --
 .../apache/ignite/internal/IgniteComputeImpl.java   |  3 ---
 .../apache/ignite/internal/IgniteEventsImpl.java    |  1 -
 .../org/apache/ignite/internal/IgniteKernal.java    |  5 -----
 .../apache/ignite/internal/IgniteServicesImpl.java  |  1 -
 .../java/org/apache/ignite/internal/IgnitionEx.java |  1 -
 .../ignite/internal/binary/BinaryEnumCache.java     |  1 -
 .../internal/binary/BinaryEnumObjectImpl.java       |  1 -
 .../ignite/internal/binary/BinaryFieldImpl.java     |  1 -
 .../ignite/internal/binary/BinaryObjectExImpl.java  |  1 -
 .../ignite/internal/binary/BinaryObjectImpl.java    |  7 -------
 .../internal/binary/BinaryObjectOffheapImpl.java    |  6 ------
 .../ignite/internal/binary/BinaryReaderExImpl.java  |  3 ---
 .../ignite/internal/binary/BinaryReaderHandles.java |  1 -
 .../ignite/internal/binary/BinaryTreeMap.java       |  1 -
 .../apache/ignite/internal/binary/BinaryUtils.java  |  3 ---
 .../ignite/internal/binary/BinaryWriterExImpl.java  |  3 ---
 .../ignite/internal/binary/BinaryWriterHandles.java |  1 -
 .../internal/binary/GridBinaryMarshaller.java       |  3 ---
 .../binary/builder/BinaryObjectBuilderImpl.java     |  1 -
 .../internal/client/impl/GridClientDataImpl.java    |  1 -
 .../internal/client/impl/GridClientNodeImpl.java    |  1 -
 .../marshaller/jdk/GridClientJdkMarshaller.java     |  1 -
 .../ignite/internal/client/thin/ClientBinary.java   |  1 -
 .../ignite/internal/client/thin/ClientUtils.java    |  1 -
 .../ignite/internal/client/thin/TcpClientCache.java |  1 -
 .../internal/client/util/GridConcurrentHashSet.java |  2 --
 .../internal/direct/state/DirectMessageState.java   |  2 --
 .../stream/v1/DirectByteBufferStreamImplV1.java     |  6 ------
 .../stream/v2/DirectByteBufferStreamImplV2.java     |  7 -------
 .../internal/igfs/common/IgfsControlResponse.java   |  1 -
 .../apache/ignite/internal/jdbc/JdbcResultSet.java  |  1 -
 .../internal/jdbc/thin/JdbcThinConnection.java      |  2 --
 .../jdbc/thin/JdbcThinDatabaseMetadata.java         |  1 -
 .../jdbc/thin/JdbcThinParameterMetadata.java        |  1 -
 .../jdbc/thin/JdbcThinPreparedStatement.java        |  1 -
 .../internal/jdbc/thin/JdbcThinResultSet.java       |  2 --
 .../internal/jdbc/thin/JdbcThinStatement.java       |  1 -
 .../ignite/internal/jdbc2/JdbcConnection.java       |  1 -
 .../ignite/internal/jdbc2/JdbcDatabaseMetadata.java |  1 -
 .../apache/ignite/internal/jdbc2/JdbcResultSet.java |  2 --
 .../internal/jdbc2/JdbcResultSetMetadata.java       |  1 -
 .../apache/ignite/internal/jdbc2/JdbcStatement.java |  1 -
 .../managers/communication/GridIoManager.java       | 16 +++-------------
 .../managers/deployment/GridDeployment.java         |  3 ---
 .../deployment/GridDeploymentLocalStore.java        |  1 -
 .../eventstorage/GridEventStorageManager.java       |  4 ----
 .../marshaller/optimized/OptimizedMarshaller.java   |  2 --
 .../optimized/OptimizedObjectInputStream.java       |  4 ----
 .../processors/affinity/GridAffinityProcessor.java  |  1 -
 .../IgniteAuthenticationProcessor.java              |  2 --
 .../internal/processors/cache/CacheEntryImpl.java   |  1 -
 .../internal/processors/cache/CacheEntryImpl0.java  |  1 -
 .../processors/cache/CacheEvictableEntryImpl.java   |  2 --
 .../internal/processors/cache/CacheInvokeEntry.java |  1 -
 .../processors/cache/CacheInvokeResult.java         |  1 -
 .../internal/processors/cache/CacheLazyEntry.java   |  2 --
 .../internal/processors/cache/CacheObjectImpl.java  |  1 -
 .../internal/processors/cache/CacheObjectUtils.java |  1 -
 .../cache/CachePartialUpdateCheckedException.java   |  1 -
 .../internal/processors/cache/GridCacheAdapter.java |  7 +------
 .../internal/processors/cache/GridCacheContext.java |  4 ----
 .../processors/cache/GridCacheEvictionManager.java  |  1 -
 .../processors/cache/GridCacheIoManager.java        |  4 ----
 .../processors/cache/GridCacheMapEntry.java         | 13 ++-----------
 .../processors/cache/GridCacheMvccManager.java      |  6 ------
 .../processors/cache/GridCacheProcessor.java        |  6 ------
 .../processors/cache/GridCacheProxyImpl.java        |  2 --
 .../internal/processors/cache/GridCacheReturn.java  |  3 ---
 .../processors/cache/GridCacheUtilityKey.java       |  1 -
 .../internal/processors/cache/GridCacheUtils.java   |  6 ------
 .../cache/IgniteCacheOffheapManagerImpl.java        |  2 --
 .../internal/processors/cache/IgniteCacheProxy.java |  2 --
 .../processors/cache/IgniteCacheProxyImpl.java      |  3 ---
 .../processors/cache/KeyCacheObjectImpl.java        |  1 -
 .../cache/affinity/GridCacheAffinityProxy.java      |  1 -
 .../binary/CacheObjectBinaryProcessorImpl.java      |  2 --
 .../processors/cache/binary/IgniteBinaryImpl.java   |  1 -
 .../datastructures/CacheDataStructuresManager.java  |  4 ----
 .../dht/CacheDistributedGetFutureAdapter.java       |  1 -
 .../cache/distributed/dht/GridDhtCacheAdapter.java  |  2 +-
 .../cache/distributed/dht/GridDhtCacheEntry.java    |  4 +---
 .../cache/distributed/dht/GridDhtLockFuture.java    |  2 --
 .../dht/GridDhtTxAbstractEnlistFuture.java          |  2 --
 .../distributed/dht/GridDhtTxFinishFuture.java      |  3 ---
 .../cache/distributed/dht/GridDhtTxLocal.java       |  2 --
 .../distributed/dht/GridDhtTxPrepareFuture.java     |  1 -
 .../dht/NearTxQueryEnlistResultHandler.java         |  1 -
 .../cache/distributed/dht/NearTxResultHandler.java  |  1 -
 .../distributed/dht/atomic/GridDhtAtomicCache.java  |  3 ---
 .../dht/atomic/GridNearAtomicFullUpdateRequest.java |  2 --
 .../atomic/GridNearAtomicSingleUpdateFuture.java    |  1 -
 .../dht/atomic/GridNearAtomicUpdateFuture.java      |  5 -----
 .../dht/colocated/GridDhtColocatedCache.java        |  1 -
 .../dht/preloader/GridDhtForceKeysFuture.java       |  2 --
 .../dht/preloader/GridDhtPartitionSupplier.java     |  1 -
 .../preloader/GridDhtPartitionsSingleMessage.java   |  1 -
 .../dht/topology/GridClientPartitionTopology.java   |  2 --
 .../dht/topology/GridDhtPartitionTopologyImpl.java  |  2 --
 .../cache/distributed/near/GridNearAtomicCache.java |  4 ----
 .../cache/distributed/near/GridNearGetFuture.java   |  1 -
 .../cache/distributed/near/GridNearLockFuture.java  |  1 -
 .../distributed/near/GridNearTxFinishFuture.java    |  2 --
 .../cache/distributed/near/GridNearTxLocal.java     |  3 ---
 .../cache/local/atomic/GridLocalAtomicCache.java    |  8 --------
 .../processors/cache/mvcc/MvccProcessorImpl.java    |  2 --
 .../cache/persistence/pagemem/PageMemoryImpl.java   |  1 -
 .../cache/persistence/tree/BPlusTree.java           | 16 ----------------
 .../cache/persistence/tree/io/PageIO.java           |  2 --
 .../query/GridCacheDistributedQueryFuture.java      |  3 ---
 .../query/GridCacheDistributedQueryManager.java     |  4 ----
 .../cache/query/GridCacheQueryAdapter.java          |  5 +----
 .../cache/query/GridCacheQueryFutureAdapter.java    |  3 ---
 .../cache/query/GridCacheQueryManager.java          |  2 +-
 .../cache/query/GridCacheQueryResponse.java         |  1 -
 .../cache/query/GridCacheQueryResponseEntry.java    |  1 -
 .../continuous/CacheContinuousQueryEventBuffer.java |  1 -
 .../continuous/CacheContinuousQueryHandler.java     |  1 -
 .../continuous/CacheContinuousQueryHandlerV3.java   |  2 --
 .../continuous/CacheContinuousQueryManager.java     |  2 --
 .../cache/store/GridCacheWriteBehindStore.java      |  1 -
 .../cache/transactions/IgniteTxAdapter.java         |  2 +-
 .../cache/transactions/IgniteTxLocalAdapter.java    |  1 -
 .../cache/transactions/IgniteTxManager.java         |  7 -------
 .../cache/transactions/TxDeadlockDetection.java     |  1 -
 .../version/GridCacheLazyPlainVersionedEntry.java   |  1 -
 .../processors/cluster/ClusterProcessor.java        |  1 -
 .../continuous/GridContinuousMessage.java           |  1 -
 .../continuous/GridContinuousProcessor.java         |  3 ---
 .../processors/continuous/StartRequestData.java     |  1 -
 .../processors/datastreamer/DataStreamerImpl.java   |  1 -
 .../datastructures/DataStructuresProcessor.java     |  4 ----
 .../GridCacheAtomicReferenceValue.java              |  1 -
 .../datastructures/GridCacheAtomicStampedValue.java |  1 -
 .../datastructures/GridCacheCountDownLatchImpl.java |  1 -
 .../processors/igfs/IgfsAbstractOutputStream.java   |  1 -
 .../internal/processors/igfs/IgfsDataManager.java   |  1 -
 .../ignite/internal/processors/igfs/IgfsImpl.java   |  4 ----
 .../processors/igfs/IgfsInputStreamImpl.java        |  1 -
 .../platform/client/ClientResourceRegistry.java     |  1 -
 .../platform/dotnet/PlatformDotNetCacheStore.java   |  1 -
 .../dotnet/PlatformDotNetConfigurationClosure.java  |  1 -
 .../processors/platform/events/PlatformEvents.java  | 10 ++++------
 .../processors/platform/utils/PlatformUtils.java    |  1 -
 .../processors/plugin/CachePluginManager.java       |  3 +--
 .../processors/plugin/IgnitePluginProcessor.java    |  2 --
 .../query/GridQueryCacheObjectsIterator.java        |  1 -
 .../processors/query/GridQueryProcessor.java        |  1 -
 .../processors/query/QueryKeyValueIterator.java     |  1 -
 .../processors/query/QueryTypeDescriptorImpl.java   |  1 -
 .../query/property/QueryBinaryProperty.java         |  1 -
 .../client/message/GridClientTaskResultBean.java    |  1 -
 .../processors/service/GridServiceProcessor.java    |  6 ------
 .../processors/service/GridServiceProxy.java        |  1 -
 .../processors/service/ServiceContextImpl.java      |  1 -
 .../processors/service/ServiceDescriptorImpl.java   |  1 -
 .../internal/processors/task/GridTaskProcessor.java |  3 ---
 .../internal/processors/task/GridTaskWorker.java    |  3 ---
 .../org/apache/ignite/internal/util/GridArrays.java |  1 -
 .../internal/util/GridBoundedLinkedHashMap.java     |  1 -
 .../internal/util/GridBoundedLinkedHashSet.java     |  1 -
 .../internal/util/GridConcurrentSkipListSet.java    |  2 +-
 .../apache/ignite/internal/util/GridLeanMap.java    |  2 +-
 .../apache/ignite/internal/util/GridLeanSet.java    |  1 -
 .../apache/ignite/internal/util/GridListSet.java    |  3 ---
 .../apache/ignite/internal/util/GridSetWrapper.java |  2 --
 .../apache/ignite/internal/util/IgniteUtils.java    | 12 ------------
 .../util/StripedCompositeReadWriteLock.java         |  1 -
 .../internal/util/future/GridCompoundFuture.java    |  3 ---
 .../internal/util/future/GridFinishedFuture.java    |  2 --
 .../internal/util/future/GridFutureAdapter.java     |  2 --
 .../internal/util/future/IgniteFutureImpl.java      |  1 -
 .../apache/ignite/internal/util/lang/GridFunc.java  | 11 -----------
 .../util/lang/GridMetadataAwareAdapter.java         |  7 -------
 .../apache/ignite/internal/util/lang/GridTuple.java |  1 -
 .../ignite/internal/util/lang/GridTuple3.java       |  1 -
 .../ignite/internal/util/lang/GridTuple4.java       |  1 -
 .../ignite/internal/util/lang/GridTuple5.java       |  1 -
 .../ignite/internal/util/lang/GridTuple6.java       |  1 -
 .../util/lang/gridfunc/PredicateMapView.java        |  4 ----
 .../util/lang/gridfunc/TransformMapView.java        |  4 ----
 .../util/lang/gridfunc/TransformMapView2.java       |  4 ----
 .../ignite/internal/util/nio/GridNioServer.java     |  5 -----
 .../org/apache/ignite/internal/util/typedef/X.java  |  3 ---
 .../java/org/apache/ignite/lang/IgniteBiTuple.java  |  1 -
 .../org/apache/ignite/logger/java/JavaLogger.java   |  1 -
 .../apache/ignite/marshaller/jdk/JdkMarshaller.java |  1 -
 .../apache/ignite/spi/discovery/tcp/ClientImpl.java |  1 -
 .../apache/ignite/spi/discovery/tcp/ServerImpl.java |  1 -
 .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java   |  2 --
 .../discovery/tcp/internal/TcpDiscoveryNode.java    |  1 -
 .../multicast/TcpDiscoveryMulticastIpFinder.java    |  1 -
 .../java/org/jsr166/ConcurrentLinkedHashMap.java    | 12 +-----------
 .../java/org/apache/ignite/GridTestIoUtils.java     |  3 ---
 .../java/org/apache/ignite/GridTestJobContext.java  |  1 -
 .../java/org/apache/ignite/GridTestTaskSession.java |  1 -
 .../RendezvousAffinityFunctionSimpleBenchmark.java  |  1 -
 .../ignite/internal/ClusterGroupSelfTest.java       |  1 -
 ...ridEventStorageRuntimeConfigurationSelfTest.java |  1 -
 .../GridMultipleVersionsDeploymentSelfTest.java     |  2 --
 .../org/apache/ignite/internal/GridSelfTest.java    |  1 -
 .../IgniteClientReconnectApiExceptionTest.java      |  2 --
 .../IgniteExplicitImplicitDeploymentSelfTest.java   |  4 ----
 .../binary/BinaryObjectTypeCompatibilityTest.java   |  1 -
 ...rectByteBufferStreamImplV2ByteOrderSelfTest.java |  1 -
 .../GridAffinityProcessorAbstractSelfTest.java      |  1 -
 .../cache/CacheConcurrentReadThroughTest.java       |  1 -
 .../processors/cache/CacheMetricsManageTest.java    |  1 -
 .../cache/GridCacheAbstractFullApiSelfTest.java     |  1 -
 .../cache/GridCacheAbstractMetricsSelfTest.java     |  1 -
 .../GridCacheConcurrentTxMultiNodeLoadTest.java     |  2 +-
 .../cache/GridCacheDeploymentSelfTest.java          |  2 --
 .../cache/GridCacheInterceptorAbstractSelfTest.java |  6 ------
 .../processors/cache/GridCacheMvccSelfTest.java     |  1 -
 .../cache/GridCachePutAllFailoverSelfTest.java      |  1 -
 .../cache/IgniteCacheEntryListenerAbstractTest.java |  1 -
 .../cache/IgniteCacheInvokeAbstractTest.java        |  1 -
 .../cache/IgniteTxExceptionAbstractSelfTest.java    |  1 -
 .../cache/WithKeepBinaryCacheFullApiTest.java       |  2 --
 .../CacheLateAffinityAssignmentTest.java            |  1 -
 .../distributed/IgniteTxCachePrimarySyncTest.java   |  1 -
 .../GridCacheDhtEvictionNearReadersSelfTest.java    |  1 -
 .../IgniteCachePutRetryTransactionalSelfTest.java   |  1 -
 .../near/GridCacheNearMultiNodeSelfTest.java        |  2 +-
 .../GridCacheNearOnlyMultiNodeFullApiSelfTest.java  |  1 -
 .../near/GridCacheNearTxMultiNodeSelfTest.java      |  1 -
 ...ridCachePartitionedMultiNodeCounterSelfTest.java |  2 +-
 .../cache/eviction/EvictionAbstractTest.java        |  2 --
 .../eviction/EvictionPolicyFactoryAbstractTest.java |  4 ----
 .../GridCacheLocalTxMultiThreadedSelfTest.java      |  1 -
 .../memtracker/PageMemoryTrackerPluginProvider.java |  2 --
 .../continuous/CacheContinuousBatchAckTest.java     |  1 -
 .../CacheContinuousQueryCounterAbstractTest.java    |  1 -
 .../CacheContinuousQueryEventBufferTest.java        |  1 -
 .../transactions/AbstractDeadlockDetectionTest.java |  1 -
 .../cache/transactions/TxDeadlockCauseTest.java     |  1 -
 .../TxDeadlockDetectionUnmasrhalErrorsTest.java     |  1 -
 ...xPessimisticDeadlockDetectionCrossCacheTest.java |  1 -
 .../closure/GridClosureProcessorSelfTest.java       |  1 -
 .../processors/igfs/IgfsAbstractBaseSelfTest.java   |  1 -
 .../IpcSharedMemoryCrashDetectionSelfTest.java      |  2 +-
 .../org/apache/ignite/lang/IgniteUuidSelfTest.java  |  1 -
 .../ignite/loadtests/GridLoadTestStatistics.java    |  1 -
 .../ignite/loadtests/GridSingleExecutionTest.java   |  1 -
 .../loadtests/cache/GridCacheAbstractLoadTest.java  |  2 --
 .../redeploy/GridSingleSplitsRedeployLoadTest.java  |  1 -
 .../apache/ignite/loadtests/dsi/GridDsiClient.java  |  2 +-
 .../apache/ignite/loadtests/dsi/GridDsiPerfJob.java |  1 -
 .../marshaller/GridMarshallerAbstractTest.java      |  1 -
 .../ignite/messaging/GridMessagingSelfTest.java     |  1 -
 .../p2p/GridAbstractMultinodeRedeployTest.java      |  1 -
 .../ignite/p2p/GridP2PDoubleDeploymentSelfTest.java |  1 -
 .../p2p/GridP2PRemoteClassLoadersSelfTest.java      |  1 -
 .../apache/ignite/p2p/GridP2PTimeoutSelfTest.java   |  1 -
 .../apache/ignite/p2p/GridP2PUndeploySelfTest.java  |  2 --
 .../spi/collision/GridTestCollisionTaskSession.java |  1 -
 .../GridPriorityQueueCollisionSpiSelfTest.java      |  3 +--
 .../GridTcpCommunicationSpiRecoveryAckSelfTest.java |  2 --
 .../GridTcpCommunicationSpiRecoverySelfTest.java    |  1 -
 ...eTcpCommunicationRecoveryAckClosureSelfTest.java |  2 --
 .../tcp/TcpClientDiscoverySpiSelfTest.java          |  1 -
 .../always/GridAlwaysFailoverSpiSelfTest.java       |  1 -
 .../GridJobStealingFailoverSpiSelfTest.java         |  1 -
 .../apache/ignite/startup/GridVmNodesStarter.java   |  1 -
 .../ignite/testframework/GridSpiTestContext.java    |  2 --
 .../apache/ignite/testframework/GridTestNode.java   |  2 +-
 .../apache/ignite/testframework/GridTestUtils.java  |  1 -
 .../ConfigVariationsTestSuiteBuilder.java           |  2 --
 .../testframework/configvariations/Parameters.java  |  5 -----
 .../testframework/junits/GridAbstractTest.java      |  4 +---
 .../IgniteCacheConfigVariationsAbstractTest.java    |  2 --
 .../testframework/junits/IgniteTestResources.java   |  1 -
 .../junits/cache/TestCacheSession.java              |  2 --
 .../junits/cache/TestThreadLocalCacheSession.java   |  2 --
 .../junits/common/GridCommonAbstractTest.java       |  5 -----
 .../junits/multijvm/IgniteCacheProcessProxy.java    |  1 -
 .../junits/spi/GridSpiAbstractTest.java             |  3 ---
 292 files changed, 40 insertions(+), 604 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/idea/ignite_inspections_teamcity.xml
----------------------------------------------------------------------
diff --git a/idea/ignite_inspections_teamcity.xml b/idea/ignite_inspections_teamcity.xml
index 759b138..3b58d3a 100644
--- a/idea/ignite_inspections_teamcity.xml
+++ b/idea/ignite_inspections_teamcity.xml
@@ -121,6 +121,7 @@
     <inspection_tool class="CanBeParameter" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CanBePrimaryConstructorProperty" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CanBeVal" enabled="false" level="WARNING" enabled_by_default="false"/>
+    <inspection_tool class="CastCanBeRemovedNarrowingVariableType" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="CastConflictsWithInstanceof" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CastThatLosesPrecision" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CastToConcreteClass" enabled="false" level="WARNING" enabled_by_default="false"/>
@@ -132,6 +133,7 @@
     <inspection_tool class="ChannelResource" enabled="false" level="WARNING" enabled_by_default="false">
         <option name="insideTryAllowed" value="false"/>
     </inspection_tool>
+    <inspection_tool class="CharsetObjectCanBeUsed" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="CharUsedInArithmeticContext" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CharacterComparison" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CheckDtdRefs" enabled="false" level="ERROR" enabled_by_default="false"/>
@@ -203,6 +205,8 @@
         <option name="IGNORE_NON_PUBLIC" value="true"/>
     </inspection_tool>
     <inspection_tool class="ComponentRegistrationProblems" enabled="false" level="ERROR" enabled_by_default="false"/>
+    <inspection_tool class="ConditionalBreakInInfiniteLoop" enabled="false" level="WARNING" enabled_by_default="false" />
+    <inspection_tool class="ConditionCoveredByFurtherCondition" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="ConditionSignal" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="ConditionalExpression" enabled="false" level="WARNING" enabled_by_default="false">
         <option name="ignoreSimpleAssignmentsAndReturns" value="false"/>
@@ -256,6 +260,7 @@
     <inspection_tool class="ConvertJavadoc" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="ConvertOldAnnotations" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="ConvertToStringTemplate" enabled="false" level="INFO" enabled_by_default="false"/>
+    <inspection_tool class="CopyConstructorMissesField" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="CovariantCompareTo" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CovariantEquals" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="CyclicClassDependency" enabled="false" level="WARNING" enabled_by_default="false"/>
@@ -301,6 +306,7 @@
     <inspection_tool class="DuplicateCondition" enabled="false" level="WARNING" enabled_by_default="false">
         <option name="ignoreMethodCalls" value="false"/>
     </inspection_tool>
+    <inspection_tool class="DuplicateExpressions" enabled="false" level="WEAK WARNING" enabled_by_default="false"/>
     <inspection_tool class="DuplicateMnemonic" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="DuplicatePropertyInspection" enabled="false" level="WARNING" enabled_by_default="false">
         <option name="CURRENT_FILE" value="true"/>
@@ -943,6 +949,9 @@
         <option name="IGNORE_ANNOTATED_METHODS" value="true"/>
         <option name="IGNORE_SUSPICIOUS_METHOD_CALLS" value="true"/>
     </inspection_tool>
+    <inspection_tool class="RedundantClassCall" enabled="false" level="WARNING" enabled_by_default="false"/>
+    <inspection_tool class="RedundantCollectionOperation" enabled="false" level="WARNING" enabled_by_default="false"/>
+    <inspection_tool class="RedundantCompareCall" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="RedundantFieldInitialization" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="RedundantImplements" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="RedundantLambdaParameterType" enabled="false" level="INFORMATION" enabled_by_default="false"/>
@@ -1076,6 +1085,7 @@
         <option name="processLiterals" value="true"/>
         <option name="processComments" value="true"/>
     </inspection_tool>
+    <inspection_tool class="SortedCollectionWithNonComparableKeys" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="SpringAopErrorsInspection" enabled="false" level="ERROR" enabled_by_default="false"/>
     <inspection_tool class="SpringAopWarningsInspection" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="SpringBatchModel" enabled="false" level="ERROR" enabled_by_default="false"/>
@@ -1125,6 +1135,7 @@
     <inspection_tool class="SpringTransactionalComponentInspection" enabled="false" level="ERROR" enabled_by_default="false"/>
     <inspection_tool class="SpringWebServiceAnnotationsInconsistencyInspection" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="SpringWebServicesConfigurationsInspection" enabled="false" level="ERROR" enabled_by_default="false"/>
+    <inspection_tool class="SpringXmlModelInspection" enabled="false" level="ERROR" enabled_by_default="false"/>
     <inspection_tool class="SqlAddNotNullColumnInspection" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="SqlAmbiguousColumnInspection" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="SqlAutoIncrementDuplicateInspection" enabled="false" level="WARNING" enabled_by_default="false"/>
@@ -1251,6 +1262,7 @@
     <inspection_tool class="ThrowableNotThrown" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="ThrowablePrintedToSystemOut" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="ThrowableResultOfMethodCallIgnored" enabled="false" level="WARNING" enabled_by_default="false" />
+    <inspection_tool class="ToArrayCallWithZeroLengthArrayArgument" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="TrivialIf" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="TryFinallyCanBeTryWithResources" enabled="false" level="WARNING" enabled_by_default="false" />
     <inspection_tool class="TryStatementWithMultipleResources" enabled="false" level="INFORMATION" enabled_by_default="false" />
@@ -1404,6 +1416,7 @@
     <inspection_tool class="WhileLoopSpinsOnField" enabled="false" level="WARNING" enabled_by_default="false">
         <option name="ignoreNonEmtpyLoops" value="false"/>
     </inspection_tool>
+    <inspection_tool class="WrapperTypeMayBePrimitive" enabled="false" level="WARNING" enabled_by_default="false"/>
     <inspection_tool class="WrongImportPackage" enabled="false" level="ERROR" enabled_by_default="false"/>
     <inspection_tool class="WrongPackageStatement" enabled="false" level="ERROR" enabled_by_default="false"/>
     <inspection_tool class="WrongPropertyKeyValueDelimiter" enabled="false" level="WEAK WARNING" enabled_by_default="false"/>

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDataSource.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDataSource.java b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDataSource.java
index 610ff99..05c37a5 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDataSource.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteJdbcThinDataSource.java
@@ -63,7 +63,6 @@ public class IgniteJdbcThinDataSource implements DataSource, Serializable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("DataSource is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java b/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
index b376755..7b6b4dd 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/CacheManager.java
@@ -148,7 +148,6 @@ public class CacheManager implements javax.cache.CacheManager {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V, C extends Configuration<K, V>> Cache<K, V> createCache(String cacheName, C cacheCfg)
         throws IllegalArgumentException {
         kernalGateway.readLock();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityKey.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityKey.java b/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityKey.java
index 4215b05..054ff13 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/affinity/AffinityKey.java
@@ -127,7 +127,6 @@ public class AffinityKey<K> implements Externalizable {
      *
      * @return Affinity key to use for affinity mapping.
      */
-    @SuppressWarnings({"unchecked"})
     public <T> T affinityKey() {
         A.notNull(key, "key");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java
index f6e1a15..b634bd0 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/fifo/FifoEvictionPolicy.java
@@ -115,7 +115,6 @@ public class FifoEvictionPolicy<K, V> extends AbstractEvictionPolicy<K, V> imple
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected boolean removeMeta(Object meta) {
         return queue.unlinkx((Node<EvictableEntry<K, V>>)meta);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java
index d571e8c..57b4395 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/lru/LruEvictionPolicy.java
@@ -103,7 +103,6 @@ public class LruEvictionPolicy<K, V> extends AbstractEvictionPolicy<K, V> implem
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected boolean removeMeta(Object meta) {
         return queue.unlinkx((Node<EvictableEntry<K, V>>)meta);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java b/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java
index 02a6d2b..f189e08 100644
--- a/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java
+++ b/modules/core/src/main/java/org/apache/ignite/cache/eviction/sorted/SortedEvictionPolicy.java
@@ -244,7 +244,6 @@ public class SortedEvictionPolicy<K, V> extends AbstractEvictionPolicy<K, V> imp
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         super.readExternal(in);
 
@@ -256,7 +255,6 @@ public class SortedEvictionPolicy<K, V> extends AbstractEvictionPolicy<K, V> imp
      *
      * @param meta Holder.
      */
-    @SuppressWarnings("unchecked")
     @Override protected boolean removeMeta(Object meta) {
         Holder<K, V> holder = (Holder<K, V>)meta;
 
@@ -297,7 +295,6 @@ public class SortedEvictionPolicy<K, V> extends AbstractEvictionPolicy<K, V> imp
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public boolean equals(Object obj) {
             if (this == obj)
                 return true;
@@ -353,7 +350,6 @@ public class SortedEvictionPolicy<K, V> extends AbstractEvictionPolicy<K, V> imp
         private static final long serialVersionUID = 0L;
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public int compare(Holder<K, V> h1, Holder<K, V> h2) {
             if (h1 == h2)
                 return 0;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/compute/ComputeJobAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/compute/ComputeJobAdapter.java b/modules/core/src/main/java/org/apache/ignite/compute/ComputeJobAdapter.java
index 3d1c308..cd23021 100644
--- a/modules/core/src/main/java/org/apache/ignite/compute/ComputeJobAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/compute/ComputeJobAdapter.java
@@ -109,7 +109,6 @@ public abstract class ComputeJobAdapter implements ComputeJob, Callable<Object>
      * @throws NullPointerException Thrown in case when there no arguments set.
      * @throws IllegalArgumentException Thrown if index is invalid.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> T argument(int idx) {
         A.notNull(args, "args");
         A.ensure(idx >= 0 && idx < args.length, "idx >= 0 && idx < args.length");

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
index e27961d..10cbedd 100644
--- a/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
+++ b/modules/core/src/main/java/org/apache/ignite/configuration/CacheConfiguration.java
@@ -798,7 +798,6 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      *
      * @return Eviction filter or {@code null}.
      */
-    @SuppressWarnings("unchecked")
     public EvictionFilter<K, V> getEvictionFilter() {
         return (EvictionFilter<K, V>)evictFilter;
     }
@@ -895,7 +894,6 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      *
      * @return Cache store factory.
      */
-    @SuppressWarnings("unchecked")
     public Factory<CacheStore<? super K, ? super V>> getCacheStoreFactory() {
         return (Factory<CacheStore<? super K, ? super V>>)storeFactory;
     }
@@ -906,7 +904,6 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      * @param storeFactory Cache store factory.
      * @return {@code this} for chaining.
      */
-    @SuppressWarnings("unchecked")
     public CacheConfiguration<K, V> setCacheStoreFactory(
         Factory<? extends CacheStore<? super K, ? super V>> storeFactory) {
         this.storeFactory = storeFactory;
@@ -1040,7 +1037,6 @@ public class CacheConfiguration<K, V> extends MutableConfiguration<K, V> {
      * @param atomicityMode Cache atomicity mode.
      * @return {@code this} for chaining.
      */
-    @SuppressWarnings("unchecked")
     public CacheConfiguration<K, V> setAtomicityMode(CacheAtomicityMode atomicityMode) {
         this.atomicityMode = atomicityMode;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/events/CacheEvent.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/events/CacheEvent.java b/modules/core/src/main/java/org/apache/ignite/events/CacheEvent.java
index 92b2ade..7a4d24d 100644
--- a/modules/core/src/main/java/org/apache/ignite/events/CacheEvent.java
+++ b/modules/core/src/main/java/org/apache/ignite/events/CacheEvent.java
@@ -229,7 +229,6 @@ public class CacheEvent extends EventAdapter {
      *
      * @return Cache entry associated with event.
      */
-    @SuppressWarnings({"unchecked"})
     public <K> K key() {
         return (K)key;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/igfs/secondary/local/LocalIgfsSecondaryFileSystem.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/igfs/secondary/local/LocalIgfsSecondaryFileSystem.java b/modules/core/src/main/java/org/apache/ignite/igfs/secondary/local/LocalIgfsSecondaryFileSystem.java
index f5ddb1c..17cc076 100644
--- a/modules/core/src/main/java/org/apache/ignite/igfs/secondary/local/LocalIgfsSecondaryFileSystem.java
+++ b/modules/core/src/main/java/org/apache/ignite/igfs/secondary/local/LocalIgfsSecondaryFileSystem.java
@@ -137,7 +137,6 @@ public class LocalIgfsSecondaryFileSystem implements IgfsSecondaryFileSystem, Li
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("ConstantConditions")
     @Override public boolean delete(IgfsPath path, boolean recursive) {
         File f = fileForPath(path);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java
index 409a3d2..6fe54b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/AsyncSupportAdapter.java
@@ -45,7 +45,6 @@ public class AsyncSupportAdapter<T extends IgniteAsyncSupport> implements Ignite
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public T withAsync() {
         if (isAsync())
             return (T)this;
@@ -79,7 +78,6 @@ public class AsyncSupportAdapter<T extends IgniteAsyncSupport> implements Ignite
      *
      * @return Future for previous asynchronous operation.
      */
-    @SuppressWarnings("unchecked")
     public <R> IgniteFuture<R> future(boolean reset) {
         if (curFut == null)
             throw new IllegalStateException("Asynchronous mode is disabled.");

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/GridJobContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridJobContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridJobContextImpl.java
index dbfa0b1..b4b2be7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridJobContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridJobContextImpl.java
@@ -137,7 +137,6 @@ public class GridJobContextImpl implements ComputeJobContext, Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> V getAttribute(K key) {
         A.notNull(key, "key");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
index 4b4fbca..8131899 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridKernalContextImpl.java
@@ -852,7 +852,6 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> DataStreamProcessor<K, V> dataStream() {
         return (DataStreamProcessor<K, V>)dataLdrProc;
     }
@@ -980,7 +979,6 @@ public class GridKernalContextImpl implements GridKernalContext, Externalizable
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T createComponent(Class<T> cls) {
         T res = pluginProc.createComponent(cls);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
index ce6e831..88091ea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/GridTaskSessionImpl.java
@@ -285,7 +285,6 @@ public class GridTaskSessionImpl implements GridTaskSessionInternal {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> V waitForAttribute(K key, long timeout) throws InterruptedException {
         A.notNull(key, "key");
 
@@ -549,7 +548,6 @@ public class GridTaskSessionImpl implements GridTaskSessionInternal {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> V getAttribute(K key) {
         A.notNull(key, "key");
 
@@ -727,7 +725,6 @@ public class GridTaskSessionImpl implements GridTaskSessionInternal {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T loadCheckpoint(String key) {
         return loadCheckpoint0(this, key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
index 65cbb90..190ff9a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteComponentType.java
@@ -242,7 +242,6 @@ public enum IgniteComponentType {
      * @return Created component or no-op implementation.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     private <T> T createOptional0(@Nullable GridKernalContext ctx) throws IgniteCheckedException {
         Class<?> cls;
 
@@ -283,7 +282,6 @@ public enum IgniteComponentType {
      * @return Component instance.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     private <T> T create0(@Nullable GridKernalContext ctx, String clsName) throws IgniteCheckedException {
         try {
             Class<?> cls = Class.forName(clsName);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/IgniteComputeImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteComputeImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteComputeImpl.java
index 762d9a1..c1809fe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteComputeImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteComputeImpl.java
@@ -453,7 +453,6 @@ public class IgniteComputeImpl extends AsyncSupportAdapter<IgniteCompute>
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T, R> R execute(String taskName, @Nullable T arg) {
         try {
             return (R)saveOrGet(executeAsync0(taskName, arg));
@@ -475,7 +474,6 @@ public class IgniteComputeImpl extends AsyncSupportAdapter<IgniteCompute>
      * @param arg Argument.
      * @return Internal future.
      */
-    @SuppressWarnings("unchecked")
     private <T, R> IgniteInternalFuture<R> executeAsync0(String taskName, @Nullable T arg) {
         A.notNull(taskName, "taskName");
 
@@ -515,7 +513,6 @@ public class IgniteComputeImpl extends AsyncSupportAdapter<IgniteCompute>
      * @param arg Argument.
      * @return Internal future.
      */
-    @SuppressWarnings("unchecked")
     private <T, R> IgniteInternalFuture<R> executeAsync0(Class<? extends ComputeTask<T, R>> taskCls, @Nullable T arg) {
         A.notNull(taskCls, "taskCls");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/IgniteEventsImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteEventsImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteEventsImpl.java
index 030e2db..c91792d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteEventsImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteEventsImpl.java
@@ -195,7 +195,6 @@ public class IgniteEventsImpl extends AsyncSupportAdapter<IgniteEvents> implemen
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteFuture<Void> stopRemoteListenAsync(UUID opId) throws IgniteException {
         A.notNull(opId, "consumeId");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index d1d0ce5..cc0363c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -660,7 +660,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public List<String> getUserAttributesFormatted() {
         assert cfg != null;
 
@@ -774,7 +773,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
      * @param hnd Default uncaught exception handler used by thread pools.
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    @SuppressWarnings({"unchecked"})
     public void start(
         final IgniteConfiguration cfg,
         ExecutorService utilityCachePool,
@@ -1460,7 +1458,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
      * @param notifyEnabled Update notifier flag.
      * @throws IgniteCheckedException thrown if was unable to set up attribute.
      */
-    @SuppressWarnings({"unchecked", "TypeMayBeWeakened"})
     private void fillNodeAttributes(boolean notifyEnabled) throws IgniteCheckedException {
         ctx.addNodeAttribute(ATTR_REBALANCE_POOL_SIZE, configuration().getRebalanceThreadPoolSize());
         ctx.addNodeAttribute(ATTR_DATA_STREAMER_POOL_SIZE, configuration().getDataStreamerThreadPoolSize());
@@ -2817,7 +2814,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public String executeTask(String taskName, String arg) throws JMException {
         try {
             return compute().execute(taskName, arg);
@@ -3008,7 +3004,6 @@ public class IgniteKernal implements IgniteEx, IgniteMXBean, Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> IgniteBiTuple<IgniteCache<K, V>, Boolean> getOrCreateCache0(
         CacheConfiguration<K, V> cacheCfg, boolean sql) {
         A.notNull(cacheCfg, "cacheCfg");

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
index 7cbd4b5..59d6136 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteServicesImpl.java
@@ -41,7 +41,6 @@ import org.jetbrains.annotations.Nullable;
 /**
  * {@link org.apache.ignite.IgniteServices} implementation.
  */
-@SuppressWarnings("unchecked")
 public class IgniteServicesImpl extends AsyncSupportAdapter implements IgniteServices, Externalizable {
     /** */
     private static final long serialVersionUID = 0L;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
index adc0068..559b3bb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgnitionEx.java
@@ -1749,7 +1749,6 @@ public class IgnitionEx {
          * @param startCtx Starting context.
          * @throws IgniteCheckedException If start failed.
          */
-        @SuppressWarnings({"TooBroadScope"})
         private void start0(GridStartContext startCtx) throws IgniteCheckedException {
             assert grid == null : "Grid is already started: " + name;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java
index 895782e..ae8b824 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java
@@ -37,7 +37,6 @@ public class BinaryEnumCache {
      * @return Value.
      * @throws BinaryObjectException In case of invalid ordinal.
      */
-    @SuppressWarnings("unchecked")
     public static <T> T get(Class<?> cls, int ord) throws BinaryObjectException {
         assert cls != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
index 2751695..dd99787 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryEnumObjectImpl.java
@@ -174,7 +174,6 @@ public class BinaryEnumObjectImpl implements BinaryObjectEx, Externalizable, Cac
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T deserialize() throws BinaryObjectException {
         Class cls = BinaryUtils.resolveClass(ctx, typeId, clsName, ctx.configuration().getClassLoader(), true);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java
index de0b2d0..7713f58 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryFieldImpl.java
@@ -102,7 +102,6 @@ public class BinaryFieldImpl implements BinaryFieldEx {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T value(BinaryObject obj) {
         BinaryObjectExImpl obj0 = (BinaryObjectExImpl)obj;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
index f213ad9..51599f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectExImpl.java
@@ -247,7 +247,6 @@ public abstract class BinaryObjectExImpl implements BinaryObjectEx {
      * @param ctx Reader context.
      * @param handles Handles for already traversed objects.
      */
-    @SuppressWarnings("unchecked")
     private void appendValue(Object val, SB buf, BinaryReaderHandles ctx,
         IdentityHashMap<BinaryObject, Integer> handles) {
         if (val instanceof byte[])

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
index 65fb349..3081f4f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectImpl.java
@@ -135,7 +135,6 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T value(CacheObjectValueContext ctx, boolean cpy) {
         Object obj0 = obj;
 
@@ -303,13 +302,11 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <F> F field(String fieldName) throws BinaryObjectException {
         return (F) reader(null, false).unmarshalField(fieldName);
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <F> F field(int fieldId) throws BinaryObjectException {
         return (F) reader(null, false).unmarshalField(fieldId);
     }
@@ -352,7 +349,6 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <F> F fieldByOrder(int order) {
         if (order == BinarySchema.ORDER_NOT_FOUND)
             return null;
@@ -504,7 +500,6 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("IfMayBeConditional")
     @Override public boolean writeFieldByOrder(int order, ByteBuffer buf) {
         // Calculate field position.
         int schemaOffset = BinaryPrimitives.readInt(arr, start + GridBinaryMarshaller.SCHEMA_OR_RAW_OFF_POS);
@@ -621,7 +616,6 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override protected <F> F field(BinaryReaderHandles rCtx, String fieldName) {
         return (F)reader(rCtx, false).unmarshalField(fieldName);
     }
@@ -632,7 +626,6 @@ public final class BinaryObjectImpl extends BinaryObjectExImpl implements Extern
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T deserialize() throws BinaryObjectException {
         Object obj0 = obj;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
index 7063c56..6f0176c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryObjectOffheapImpl.java
@@ -197,13 +197,11 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <F> F field(String fieldName) throws BinaryObjectException {
         return (F) reader(null, false).unmarshalField(fieldName);
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <F> F field(int fieldId) throws BinaryObjectException {
         return (F) reader(null, false).unmarshalField(fieldId);
     }
@@ -246,7 +244,6 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <F> F fieldByOrder(int order) {
         if (order == BinarySchema.ORDER_NOT_FOUND)
             return null;
@@ -408,7 +405,6 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override protected <F> F field(BinaryReaderHandles rCtx, String fieldName) {
         return (F)reader(rCtx, false).unmarshalField(fieldName);
     }
@@ -419,7 +415,6 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T deserialize() throws BinaryObjectException {
         return (T)deserializeValue();
     }
@@ -445,7 +440,6 @@ public class BinaryObjectOffheapImpl extends BinaryObjectExImpl implements Exter
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T value(CacheObjectValueContext ctx, boolean cpy) {
         return (T)deserializeValue();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
index 601141c..9d44e3c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java
@@ -1307,7 +1307,6 @@ public class BinaryReaderExImpl implements BinaryReader, BinaryRawReaderEx, Bina
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T readObject(String fieldName) throws BinaryObjectException {
         try {
             return findFieldByName(fieldName) ? (T)BinaryUtils.doReadObject(in, ctx, ldr, this) : null;
@@ -2311,13 +2310,11 @@ public class BinaryReaderExImpl implements BinaryReader, BinaryRawReaderEx, Bina
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
     @Override public void readFully(byte[] b) throws IOException {
         readFully(b, 0, b.length);
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
     @Override public void readFully(byte[] b, int off, int len) throws IOException {
         int cnt = in.read(b, off, len);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandles.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandles.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandles.java
index 27a9918..f3ee443 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandles.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryReaderHandles.java
@@ -50,7 +50,6 @@ public class BinaryReaderHandles {
      * @param pos Position.
      * @return Object.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> T get(int pos) {
         switch (mode) {
             case MODE_EMPTY:

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryTreeMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryTreeMap.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryTreeMap.java
index 3dae8ce..3fa30fa 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryTreeMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryTreeMap.java
@@ -57,7 +57,6 @@ public class BinaryTreeMap implements Binarylizable, Serializable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void writeBinary(BinaryWriter writer) throws BinaryObjectException {
         BinaryRawWriter rawWriter = writer.rawWriter();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
index 77dce56..640cf1b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java
@@ -656,7 +656,6 @@ public class BinaryUtils {
      * @param map Map.
      * @return New map of the same type or null.
      */
-    @SuppressWarnings("unchecked")
     public static <K, V> Map<K, V> newKnownMap(Object map) {
         Class<?> cls = map == null ? null : map.getClass();
 
@@ -748,7 +747,6 @@ public class BinaryUtils {
      * @param col Collection.
      * @return New empty collection.
      */
-    @SuppressWarnings("unchecked")
     public static <V> Collection<V> newKnownCollection(Object col) {
         Class<?> cls = col == null ? null : col.getClass();
 
@@ -1074,7 +1072,6 @@ public class BinaryUtils {
      * @param cls Class.
      * @return Mode.
      */
-    @SuppressWarnings("IfMayBeConditional")
     public static BinaryWriteMode mode(Class<?> cls) {
         assert cls != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
index d882b17..29f8e73 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
@@ -1736,7 +1736,6 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
     @Override public void writeBytes(String s) throws IOException {
         int len = s.length();
 
@@ -1747,7 +1746,6 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
     @Override public void writeChars(String s) throws IOException {
         int len = s.length();
 
@@ -1758,7 +1756,6 @@ public class BinaryWriterExImpl implements BinaryWriter, BinaryRawWriterEx, Obje
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("NullableProblems")
     @Override public void writeUTF(String s) throws IOException {
         writeString(s);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterHandles.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterHandles.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterHandles.java
index 3be3898..2cbce96 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterHandles.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryWriterHandles.java
@@ -51,7 +51,6 @@ public class BinaryWriterHandles {
      * @param pos Position.
      * @return Old position.
      */
-    @SuppressWarnings("unchecked")
     public int put(Object obj, int pos) {
         assert obj != null;
         assert pos >= 0;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
index 7439589..aca48ea 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/GridBinaryMarshaller.java
@@ -262,7 +262,6 @@ public class GridBinaryMarshaller {
      * @return Binary object.
      * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> T unmarshal(byte[] bytes, @Nullable ClassLoader clsLdr) throws BinaryObjectException {
         assert bytes != null;
 
@@ -281,7 +280,6 @@ public class GridBinaryMarshaller {
      * @return Binary object.
      * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> T unmarshal(BinaryInputStream in) throws BinaryObjectException {
         BinaryContext oldCtx = pushContext(ctx);
 
@@ -299,7 +297,6 @@ public class GridBinaryMarshaller {
      * @return Deserialized object.
      * @throws org.apache.ignite.binary.BinaryObjectException In case of error.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> T deserialize(byte[] arr, @Nullable ClassLoader ldr) throws BinaryObjectException {
         assert arr != null;
         assert arr.length > 0;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
index ce3807d..a21e74b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/binary/builder/BinaryObjectBuilderImpl.java
@@ -531,7 +531,6 @@ public class BinaryObjectBuilderImpl implements BinaryObjectBuilder {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T getField(String name) {
         Object val;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientDataImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientDataImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientDataImpl.java
index a2a9754..21c09c2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientDataImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientDataImpl.java
@@ -256,7 +256,6 @@ public class GridClientDataImpl extends GridClientAbstractProjection<GridClientD
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K> UUID affinity(K key) throws GridClientException {
         A.notNull(key, "key");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientNodeImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientNodeImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientNodeImpl.java
index 4365c45..2be1bce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientNodeImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/impl/GridClientNodeImpl.java
@@ -145,7 +145,6 @@ public class GridClientNodeImpl implements GridClientNode {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T attribute(String name) {
         return (T)attrs.get(name);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/jdk/GridClientJdkMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/jdk/GridClientJdkMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/jdk/GridClientJdkMarshaller.java
index bd89e80..dc59254 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/jdk/GridClientJdkMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/jdk/GridClientJdkMarshaller.java
@@ -76,7 +76,6 @@ public class GridClientJdkMarshaller implements GridClientMarshaller {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unmarshal(byte[] bytes) throws IOException {
         ByteArrayInputStream tmp = new ByteArrayInputStream(bytes);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientBinary.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientBinary.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientBinary.java
index 6024f55..4655cbf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientBinary.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientBinary.java
@@ -50,7 +50,6 @@ class ClientBinary implements IgniteBinary {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T toBinary(Object obj) {
         if (obj == null)
             return null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
index d218e45..8e2d61a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/ClientUtils.java
@@ -496,7 +496,6 @@ final class ClientUtils {
     }
 
     /** Read Ignite binary object from input stream. */
-    @SuppressWarnings("unchecked")
     <T> T readObject(BinaryInputStream in, boolean keepBinary) {
         Object val = marsh.unmarshal(in);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
index 2da3b8f..b60b618 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/thin/TcpClientCache.java
@@ -375,7 +375,6 @@ class TcpClientCache<K, V> implements ClientCache<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K1, V1> ClientCache<K1, V1> withKeepBinary() {
         TcpClientCache<K1, V1> binCache;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/client/util/GridConcurrentHashSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/client/util/GridConcurrentHashSet.java b/modules/core/src/main/java/org/apache/ignite/internal/client/util/GridConcurrentHashSet.java
index 44fa209..3225a4a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/client/util/GridConcurrentHashSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/client/util/GridConcurrentHashSet.java
@@ -45,7 +45,6 @@ public class GridConcurrentHashSet<E> extends AbstractSet<E> {
      *
      * @param map Map to be used for set implementation.
      */
-    @SuppressWarnings({"unchecked"})
     public GridConcurrentHashSet(ConcurrentMap<E, ?> map) {
         this.map = (ConcurrentMap<E, Object>)map;
     }
@@ -55,7 +54,6 @@ public class GridConcurrentHashSet<E> extends AbstractSet<E> {
      *
      * @return Wrapped map.
      */
-    @SuppressWarnings({"unchecked"})
     protected final <T extends Map<E, Object>> T  map() {
         return (T)map;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/direct/state/DirectMessageState.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/state/DirectMessageState.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/state/DirectMessageState.java
index 58f625f..b92f600 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/direct/state/DirectMessageState.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/state/DirectMessageState.java
@@ -44,7 +44,6 @@ public class DirectMessageState<T extends DirectMessageStateItem> {
      * @param cls State item type.
      * @param factory Item factory.
      */
-    @SuppressWarnings("unchecked")
     public DirectMessageState(Class<T> cls, IgniteOutClosure<T> factory) {
         this.factory = factory;
 
@@ -63,7 +62,6 @@ public class DirectMessageState<T extends DirectMessageStateItem> {
     /**
      * Go forward.
      */
-    @SuppressWarnings("unchecked")
     public void forward() {
         pos++;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v1/DirectByteBufferStreamImplV1.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v1/DirectByteBufferStreamImplV1.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v1/DirectByteBufferStreamImplV1.java
index 118e1f1..75ac038 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v1/DirectByteBufferStreamImplV1.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v1/DirectByteBufferStreamImplV1.java
@@ -584,7 +584,6 @@ public class DirectByteBufferStreamImplV1 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> void writeMap(Map<K, V> map, MessageCollectionItemType keyType,
         MessageCollectionItemType valType, MessageWriter writer) {
         if (map != null) {
@@ -823,7 +822,6 @@ public class DirectByteBufferStreamImplV1 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T extends Message> T readMessage(MessageReader reader) {
         if (!msgTypeDone) {
             if (buf.remaining() < Message.DIRECT_TYPE_SIZE) {
@@ -867,7 +865,6 @@ public class DirectByteBufferStreamImplV1 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T[] readObjectArray(MessageCollectionItemType itemType, Class<T> itemCls,
         MessageReader reader) {
         if (readSize == -1) {
@@ -907,7 +904,6 @@ public class DirectByteBufferStreamImplV1 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <C extends Collection<?>> C readCollection(MessageCollectionItemType itemType,
         MessageReader reader) {
         if (readSize == -1) {
@@ -947,7 +943,6 @@ public class DirectByteBufferStreamImplV1 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <M extends Map<?, ?>> M readMap(MessageCollectionItemType keyType,
         MessageCollectionItemType valType, boolean linked, MessageReader reader) {
         if (readSize == -1) {
@@ -1056,7 +1051,6 @@ public class DirectByteBufferStreamImplV1 implements DirectByteBufferStream {
      * @param off Base offset.
      * @return Array or special value if it was not fully read.
      */
-    @SuppressWarnings("unchecked")
     private <T> T readArray(ArrayCreator<T> creator, int lenShift, long off) {
         assert creator != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2.java b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2.java
index fd93cfb..ef6e01f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2.java
@@ -788,7 +788,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> void writeMap(Map<K, V> map, MessageCollectionItemType keyType,
         MessageCollectionItemType valType, MessageWriter writer) {
         if (map != null) {
@@ -1164,7 +1163,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T extends Message> T readMessage(MessageReader reader) {
         if (!msgTypeDone) {
             if (buf.remaining() < Message.DIRECT_TYPE_SIZE) {
@@ -1208,7 +1206,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T[] readObjectArray(MessageCollectionItemType itemType, Class<T> itemCls,
         MessageReader reader) {
         if (readSize == -1) {
@@ -1248,7 +1245,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <C extends Collection<?>> C readCollection(MessageCollectionItemType itemType,
         MessageReader reader) {
         if (readSize == -1) {
@@ -1288,7 +1284,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <M extends Map<?, ?>> M readMap(MessageCollectionItemType keyType,
         MessageCollectionItemType valType, boolean linked, MessageReader reader) {
         if (readSize == -1) {
@@ -1466,7 +1461,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
      * @param off Base offset.
      * @return Array or special value if it was not fully read.
      */
-    @SuppressWarnings("unchecked")
     <T> T readArray(ArrayCreator<T> creator, int lenShift, long off) {
         assert creator != null;
 
@@ -1530,7 +1524,6 @@ public class DirectByteBufferStreamImplV2 implements DirectByteBufferStream {
      * @param off Base offset.
      * @return Array or special value if it was not fully read.
      */
-    @SuppressWarnings("unchecked")
     <T> T readArrayLE(ArrayCreator<T> creator, int typeSize, int lenShift, long off) {
         assert creator != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsControlResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsControlResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsControlResponse.java
index 2614cf7..2ad8dbe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsControlResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/igfs/common/IgfsControlResponse.java
@@ -388,7 +388,6 @@ public class IgfsControlResponse extends IgfsMessage {
      * @param out Data output.
      * @throws IOException If error occurred.
      */
-    @SuppressWarnings("unchecked")
     public void writeExternal(ObjectOutput out) throws IOException {
         byte[] hdr = new byte[RES_HEADER_SIZE];
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
index 544207e..9a6a388 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/JdbcResultSet.java
@@ -1502,7 +1502,6 @@ public class JdbcResultSet implements ResultSet {
      * @return Casted field value.
      * @throws SQLException In case of error.
      */
-    @SuppressWarnings("unchecked")
     private <T> T getTypedValue(int colIdx, Class<T> cls) throws SQLException {
         ensureNotClosed();
         ensureHasCurrentRow();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
index 6878c8f..110cc74 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinConnection.java
@@ -654,7 +654,6 @@ public class JdbcThinConnection implements Connection {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Connection is not a wrapper for " + iface.getName());
@@ -739,7 +738,6 @@ public class JdbcThinConnection implements Connection {
      * @return Server response.
      * @throws SQLException On any error.
      */
-    @SuppressWarnings("unchecked")
     <R extends JdbcResult> R sendRequest(JdbcRequest req) throws SQLException {
         ensureConnected();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
index f79b16d..d1a5f6d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinDatabaseMetadata.java
@@ -1502,7 +1502,6 @@ public class JdbcThinDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Database meta data is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinParameterMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinParameterMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinParameterMetadata.java
index 8647258..093637b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinParameterMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinParameterMetadata.java
@@ -86,7 +86,6 @@ public class JdbcThinParameterMetadata implements ParameterMetaData {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Parameters metadata is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinPreparedStatement.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinPreparedStatement.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinPreparedStatement.java
index d18788c..b9ed4ba 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinPreparedStatement.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinPreparedStatement.java
@@ -507,7 +507,6 @@ public class JdbcThinPreparedStatement extends JdbcThinStatement implements Prep
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Prepared statement is not a wrapper for " + iface.getName());


[43/52] [abbrv] ignite git commit: IGNITE-10264: MVCC TX: Unmute tests. This closes #5685.

Posted by sb...@apache.org.
IGNITE-10264: MVCC TX: Unmute tests. This closes #5685.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/83859936
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/83859936
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/83859936

Branch: refs/heads/ignite-627
Commit: 8385993697fefc38543d80e7412dfce22d920752
Parents: 7b6e17b
Author: rkondakov <ko...@mail.ru>
Authored: Wed Dec 19 15:54:59 2018 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Wed Dec 19 15:54:59 2018 +0300

----------------------------------------------------------------------
 .../internal/processors/cache/IgniteCacheIncrementTxTest.java | 7 -------
 1 file changed, 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/83859936/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheIncrementTxTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheIncrementTxTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheIncrementTxTest.java
index d595cc9..f7c3160 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheIncrementTxTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheIncrementTxTest.java
@@ -36,7 +36,6 @@ import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
 import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testframework.MvccFeatureChecker;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.apache.ignite.transactions.Transaction;
 import org.junit.Test;
@@ -95,9 +94,6 @@ public class IgniteCacheIncrementTxTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncrementTxTopologyChange1() throws Exception {
-        if (MvccFeatureChecker.forcedMvcc())
-            fail("https://issues.apache.org/jira/browse/IGNITE-10264");
-
         nodeJoin(cacheConfiguration(1));
     }
 
@@ -106,9 +102,6 @@ public class IgniteCacheIncrementTxTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncrementTxTopologyChange2() throws Exception {
-        if (MvccFeatureChecker.forcedMvcc())
-            fail("https://issues.apache.org/jira/browse/IGNITE-10264");
-
         nodeJoin(cacheConfiguration(2));
     }
 


[38/52] [abbrv] ignite git commit: IGNITE-9839 Web Console: update to RxJS 6.

Posted by sb...@apache.org.
IGNITE-9839 Web Console: update to RxJS 6.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7d4e1fd1
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7d4e1fd1
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7d4e1fd1

Branch: refs/heads/ignite-627
Commit: 7d4e1fd118845f6e14638520ac10881deadd570c
Parents: 388f7ff
Author: Ilya Borisov <kl...@gmail.com>
Authored: Wed Dec 19 10:03:31 2018 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Wed Dec 19 10:03:31 2018 +0700

----------------------------------------------------------------------
 .../components/cluster-selector/controller.js   |  17 +-
 .../connected-clusters-badge/controller.js      |  11 +-
 .../components/cache-edit-form/controller.js    |  10 +-
 .../components/cluster-edit-form/controller.js  |  10 +-
 .../controller.js                               |  36 +-
 .../controller.js                               |  29 +-
 .../page-configure-advanced-igfs/controller.js  |  49 +-
 .../controller.js                               |  45 +-
 .../page-configure-basic/controller.js          |  87 ++-
 .../page-configure-basic/controller.spec.js     |   6 +-
 .../page-configure-overview/controller.js       |  11 +-
 .../components/modal-import-models/component.js | 111 ++--
 .../app/components/page-configure/controller.js |  15 +-
 .../app/components/page-configure/index.d.ts    |  29 +-
 .../app/components/page-configure/index.ts      |  26 +-
 .../services/ConfigChangesGuard.js              |  11 +-
 .../services/ConfigSelectionManager.js          |  75 +--
 .../page-configure/services/ConfigureState.js   |  11 +-
 .../page-configure/services/PageConfigure.js    |  49 +-
 .../services/PageConfigure.spec.js              |  17 +-
 .../app/components/page-configure/states.js     |  62 +-
 .../components/page-configure/store/effects.js  | 638 ++++++++++---------
 .../page-configure/store/effects.spec.js        |   7 +-
 .../page-configure/store/selectors.js           | 159 ++---
 .../components/queries-notebook/controller.ts   |  30 +-
 .../app/modules/agent/AgentManager.service.js   |  25 +-
 .../frontend/app/modules/user/User.service.js   |   2 +-
 .../frontend/app/services/Clusters.js           |   9 +-
 .../frontend/app/services/Version.service.js    |   2 +-
 .../web-console/frontend/app/services/store.ts  |  10 +-
 .../web-console/frontend/app/store/ofType.ts    |   2 +-
 .../frontend/app/utils/SimpleWorkerPool.js      |  19 +-
 modules/web-console/frontend/package.json       |   4 +-
 33 files changed, 869 insertions(+), 755 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/cluster-selector/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/cluster-selector/controller.js b/modules/web-console/frontend/app/components/cluster-selector/controller.js
index fb64b9f..484a5eb 100644
--- a/modules/web-console/frontend/app/components/cluster-selector/controller.js
+++ b/modules/web-console/frontend/app/components/cluster-selector/controller.js
@@ -17,8 +17,8 @@
 
 import _ from 'lodash';
 
-import { BehaviorSubject } from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/combineLatest';
+import { BehaviorSubject } from 'rxjs';
+import {tap, filter, combineLatest} from 'rxjs/operators';
 
 export default class {
     static $inject = ['AgentManager', 'IgniteConfirm', 'IgniteVersion', 'IgniteMessages'];
@@ -46,15 +46,16 @@ export default class {
 
         this.inProgress$ = this._inProgressSubject.asObservable();
 
-        this.clusters$ = this.agentMgr.connectionSbj
-            .combineLatest(this.inProgress$)
-            .do(([sbj, inProgress]) => this.inProgress = inProgress)
-            .filter(([sbj, inProgress]) => !inProgress)
-            .do(([{cluster, clusters}]) => {
+        this.clusters$ = this.agentMgr.connectionSbj.pipe(
+            combineLatest(this.inProgress$),
+            tap(([sbj, inProgress]) => this.inProgress = inProgress),
+            filter(([sbj, inProgress]) => !inProgress),
+            tap(([{cluster, clusters}]) => {
                 this.cluster = cluster ? {...cluster} : null;
                 this.clusters = _.orderBy(clusters, ['name'], ['asc']);
             })
-            .subscribe(() => {});
+        )
+        .subscribe(() => {});
     }
 
     $onDestroy() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/connected-clusters-badge/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/connected-clusters-badge/controller.js b/modules/web-console/frontend/app/components/connected-clusters-badge/controller.js
index 807c3ba..294f955 100644
--- a/modules/web-console/frontend/app/components/connected-clusters-badge/controller.js
+++ b/modules/web-console/frontend/app/components/connected-clusters-badge/controller.js
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+import {tap} from 'rxjs/operators';
+
 export default class {
     static $inject = ['AgentManager', 'ConnectedClustersDialog'];
 
@@ -36,10 +38,11 @@ export default class {
     }
 
     $onInit() {
-        this.connectedClusters$ = this.agentMgr.connectionSbj
-            .do(({ clusters }) => this.connectedClusters = clusters.length)
-            .do(({ clusters }) => this.clusters = clusters)
-            .subscribe();
+        this.connectedClusters$ = this.agentMgr.connectionSbj.pipe(
+            tap(({ clusters }) => this.connectedClusters = clusters.length),
+            tap(({ clusters }) => this.clusters = clusters)
+        )
+        .subscribe();
     }
 
     $onDestroy() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/controller.js
index e044a70..c1beec6 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cache-edit-form/controller.js
@@ -17,6 +17,7 @@
 
 import cloneDeep from 'lodash/cloneDeep';
 import get from 'lodash/get';
+import {tap} from 'rxjs/operators';
 
 export default class CacheEditFormController {
     /** @type {ig.menu<string>} */
@@ -61,10 +62,11 @@ export default class CacheEditFormController {
 
         };
 
-        this.subscription = this.IgniteVersion.currentSbj
-            .do(rebuildDropdowns)
-            .do(filterModel)
-            .subscribe();
+        this.subscription = this.IgniteVersion.currentSbj.pipe(
+            tap(rebuildDropdowns),
+            tap(filterModel)
+        )
+        .subscribe();
 
         // TODO: Do we really need this?
         this.$scope.ui = this.IgniteFormUtils.formUI();

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
index 5020d7b..7400b43 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
@@ -19,6 +19,7 @@ import cloneDeep from 'lodash/cloneDeep';
 import get from 'lodash/get';
 import isEqual from 'lodash/isEqual';
 import _ from 'lodash';
+import {tap} from 'rxjs/operators';
 
 export default class ClusterEditFormController {
     /** @type {Array<ig.config.cache.ShortCache>} */
@@ -86,10 +87,11 @@ export default class ClusterEditFormController {
             }
         };
 
-        this.subscription = this.IgniteVersion.currentSbj
-            .do(rebuildDropdowns)
-            .do(() => filterModel(this.clonedCluster))
-            .subscribe();
+        this.subscription = this.IgniteVersion.currentSbj.pipe(
+            tap(rebuildDropdowns),
+            tap(() => filterModel(this.clonedCluster))
+        )
+        .subscribe();
 
         this.supportedJdbcTypes = this.IgniteLegacyUtils.mkOptions(this.IgniteLegacyUtils.SUPPORTED_JDBC_TYPES);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-caches/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-caches/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-caches/controller.js
index da17c67..2cfe08a 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-caches/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-caches/controller.js
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-import {Subject} from 'rxjs/Subject';
-import {merge} from 'rxjs/observable/merge';
+import {Subject, merge, combineLatest} from 'rxjs';
+import {tap, map, refCount, pluck, publishReplay, switchMap, distinctUntilChanged} from 'rxjs/operators';
 import naturalCompare from 'natural-compare-lite';
-import {combineLatest} from 'rxjs/observable/combineLatest';
 import {removeClusterItems, advancedSaveCache} from 'app/components/page-configure/store/actionCreators';
 import ConfigureState from 'app/components/page-configure/services/ConfigureState';
 import ConfigSelectors from 'app/components/page-configure/store/selectors';
@@ -103,16 +102,23 @@ export default class Controller {
     }
 
     $onInit() {
-        const cacheID$ = this.$uiRouter.globals.params$.pluck('cacheID').publishReplay(1).refCount();
+        const cacheID$ = this.$uiRouter.globals.params$.pipe(
+            pluck('cacheID'),
+            publishReplay(1),
+            refCount()
+        );
 
-        this.shortCaches$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortCaches);
-        this.shortModels$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortModels);
-        this.shortIGFSs$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortIGFSs);
-        this.originalCache$ = cacheID$.distinctUntilChanged().switchMap((id) => {
-            return this.ConfigureState.state$.let(this.ConfigSelectors.selectCacheToEdit(id));
-        });
+        this.shortCaches$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCurrentShortCaches);
+        this.shortModels$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCurrentShortModels);
+        this.shortIGFSs$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCurrentShortIGFSs);
+        this.originalCache$ = cacheID$.pipe(
+            distinctUntilChanged(),
+            switchMap((id) => {
+                return this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCacheToEdit(id));
+            })
+        );
 
-        this.isNew$ = cacheID$.map((id) => id === 'new');
+        this.isNew$ = cacheID$.pipe(map((id) => id === 'new'));
         this.itemEditTitle$ = combineLatest(this.isNew$, this.originalCache$, (isNew, cache) => {
             return `${isNew ? 'Create' : 'Edit'} cache ${!isNew && cache.name ? `‘${cache.name}’` : ''}`;
         });
@@ -125,13 +131,13 @@ export default class Controller {
 
         this.subscription = merge(
             this.originalCache$,
-            this.selectionManager.editGoes$.do((id) => this.edit(id)),
-            this.selectionManager.editLeaves$.do((options) => this.$state.go('base.configuration.edit.advanced.caches', null, options))
+            this.selectionManager.editGoes$.pipe(tap((id) => this.edit(id))),
+            this.selectionManager.editLeaves$.pipe(tap((options) => this.$state.go('base.configuration.edit.advanced.caches', null, options)))
         ).subscribe();
 
         this.isBlocked$ = cacheID$;
 
-        this.tableActions$ = this.selectionManager.selectedItemIDs$.map((selectedItems) => [
+        this.tableActions$ = this.selectionManager.selectedItemIDs$.pipe(map((selectedItems) => [
             {
                 action: 'Clone',
                 click: () => this.clone(selectedItems),
@@ -144,7 +150,7 @@ export default class Controller {
                 },
                 available: true
             }
-        ]);
+        ]));
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-cluster/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-cluster/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-cluster/controller.js
index f0348c3..2aae041 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-cluster/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-cluster/controller.js
@@ -18,7 +18,7 @@
 import {default as ConfigSelectors} from 'app/components/page-configure/store/selectors';
 import {default as ConfigureState} from 'app/components/page-configure/services/ConfigureState';
 import {advancedSaveCluster} from 'app/components/page-configure/store/actionCreators';
-import 'rxjs/add/operator/publishReplay';
+import {take, pluck, switchMap, map, filter, distinctUntilChanged, publishReplay, refCount} from 'rxjs/operators';
 
 // Controller for Clusters screen.
 export default class PageConfigureAdvancedCluster {
@@ -36,12 +36,27 @@ export default class PageConfigureAdvancedCluster {
     }
 
     $onInit() {
-        const clusterID$ = this.$uiRouter.globals.params$.take(1).pluck('clusterID').filter((v) => v).take(1);
-        this.shortCaches$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortCaches);
-        this.originalCluster$ = clusterID$.distinctUntilChanged().switchMap((id) => {
-            return this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterToEdit(id));
-        }).distinctUntilChanged().publishReplay(1).refCount();
-        this.isNew$ = this.$uiRouter.globals.params$.pluck('clusterID').map((id) => id === 'new');
+        const clusterID$ = this.$uiRouter.globals.params$.pipe(
+            take(1),
+            pluck('clusterID'),
+            filter((v) => v),
+            take(1)
+        );
+
+        this.shortCaches$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCurrentShortCaches);
+
+        this.originalCluster$ = clusterID$.pipe(
+            distinctUntilChanged(),
+            switchMap((id) => {
+                return this.ConfigureState.state$.pipe(this.ConfigSelectors.selectClusterToEdit(id));
+            }),
+            distinctUntilChanged(),
+            publishReplay(1),
+            refCount()
+        );
+
+        this.isNew$ = this.$uiRouter.globals.params$.pipe(pluck('clusterID'), map((id) => id === 'new'));
+
         this.isBlocked$ = clusterID$;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-igfs/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-igfs/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-igfs/controller.js
index 50eee7c..0e6345b 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-igfs/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-igfs/controller.js
@@ -15,11 +15,9 @@
  * limitations under the License.
  */
 
-import {Observable} from 'rxjs/Observable';
-import {Subject} from 'rxjs/Subject';
-import {combineLatest} from 'rxjs/observable/combineLatest';
+import {Observable, Subject, combineLatest, merge} from 'rxjs';
+import {tap, map, distinctUntilChanged, pluck, publishReplay, refCount, switchMap} from 'rxjs/operators';
 import naturalCompare from 'natural-compare-lite';
-import {merge} from 'rxjs/observable/merge';
 import get from 'lodash/get';
 import {removeClusterItems, advancedSaveIGFS} from 'app/components/page-configure/store/actionCreators';
 import ConfigureState from 'app/components/page-configure/services/ConfigureState';
@@ -82,31 +80,44 @@ export default class PageConfigureAdvancedIGFS {
                 width: 130
             }
         ];
-        this.itemID$ = this.$uiRouter.globals.params$.pluck('igfsID');
+
+        this.itemID$ = this.$uiRouter.globals.params$.pipe(pluck('igfsID'));
 
         /** @type {Observable<ig.config.igfs.ShortIGFS>} */
-        this.shortItems$ = this.ConfigureState.state$
-            .let(this.ConfigSelectors.selectCurrentShortIGFSs)
-            .map((items = []) => items.map((i) => ({
+        this.shortItems$ = this.ConfigureState.state$.pipe(
+            this.ConfigSelectors.selectCurrentShortIGFSs,
+            map((items = []) => items.map((i) => ({
                 _id: i._id,
                 name: i.name,
                 affinnityGroupSize: i.affinnityGroupSize || this.IGFSs.affinnityGroupSize.default,
                 defaultMode: i.defaultMode || this.IGFSs.defaultMode.default
-            })));
-        this.originalItem$ = this.itemID$.distinctUntilChanged().switchMap((id) => {
-            return this.ConfigureState.state$.let(this.ConfigSelectors.selectIGFSToEdit(id));
-        }).distinctUntilChanged().publishReplay(1).refCount();
-        this.isNew$ = this.itemID$.map((id) => id === 'new');
+            })))
+        );
+
+        this.originalItem$ = this.itemID$.pipe(
+            distinctUntilChanged(),
+            switchMap((id) => {
+                return this.ConfigureState.state$.pipe(this.ConfigSelectors.selectIGFSToEdit(id));
+            }),
+            distinctUntilChanged(),
+            publishReplay(1),
+            refCount()
+        );
+
+        this.isNew$ = this.itemID$.pipe(map((id) => id === 'new'));
+
         this.itemEditTitle$ = combineLatest(this.isNew$, this.originalItem$, (isNew, item) => {
             return `${isNew ? 'Create' : 'Edit'} IGFS ${!isNew && get(item, 'name') ? `‘${get(item, 'name')}’` : ''}`;
         });
+
         this.selectionManager = this.configSelectionManager({
             itemID$: this.itemID$,
             selectedItemRows$: this.selectedRows$,
             visibleRows$: this.visibleRows$,
             loadedItems$: this.shortItems$
         });
-        this.tableActions$ = this.selectionManager.selectedItemIDs$.map((selectedItems) => [
+
+        this.tableActions$ = this.selectionManager.selectedItemIDs$.pipe(map((selectedItems) => [
             {
                 action: 'Clone',
                 click: () => this.clone(selectedItems),
@@ -119,19 +130,23 @@ export default class PageConfigureAdvancedIGFS {
                 },
                 available: true
             }
-        ]);
+        ]));
+
         this.subscription = merge(
             this.originalItem$,
-            this.selectionManager.editGoes$.do((id) => this.edit(id)),
-            this.selectionManager.editLeaves$.do((options) => this.$state.go('base.configuration.edit.advanced.igfs', null, options))
+            this.selectionManager.editGoes$.pipe(tap((id) => this.edit(id))),
+            this.selectionManager.editLeaves$.pipe(tap((options) => this.$state.go('base.configuration.edit.advanced.igfs', null, options)))
         ).subscribe();
     }
+
     edit(igfsID) {
         this.$state.go('base.configuration.edit.advanced.igfs.igfs', {igfsID});
     }
+
     save({igfs, download}) {
         this.ConfigureState.dispatchAction(advancedSaveIGFS(igfs, download));
     }
+
     remove(itemIDs) {
         this.ConfigureState.dispatchAction(
             removeClusterItems(this.$uiRouter.globals.params.clusterID, 'igfss', itemIDs, true, true)

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-models/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-models/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-models/controller.js
index fd1ccaa..c2e30cf 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-models/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/page-configure-advanced-models/controller.js
@@ -15,10 +15,9 @@
  * limitations under the License.
  */
 
-import {Subject} from 'rxjs/Subject';
-import {Observable} from 'rxjs/Observable';
-import {combineLatest} from 'rxjs/observable/combineLatest';
-import {merge} from 'rxjs/observable/merge';
+import {Subject, Observable, combineLatest, merge} from 'rxjs';
+import {pluck, tap, publishReplay, refCount, distinctUntilChanged, switchMap, map} from 'rxjs/operators';
+
 import get from 'lodash/get';
 
 import hasIndexTemplate from './hasIndex.template.pug';
@@ -100,25 +99,33 @@ export default class PageConfigureAdvancedModels {
         ];
 
         /** @type {Observable<string>} */
-        this.itemID$ = this.$uiRouter.globals.params$.pluck('modelID');
+        this.itemID$ = this.$uiRouter.globals.params$.pipe(pluck('modelID'));
 
         /** @type {Observable<Array<ig.config.model.ShortDomainModel>>} */
-        this.shortItems$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortModels)
-            .do((shortModels = []) => {
+        this.shortItems$ = this.ConfigureState.state$.pipe(
+            this.ConfigSelectors.selectCurrentShortModels,
+            tap((shortModels = []) => {
                 const value = shortModels.every((m) => m.hasIndex);
                 this.columnDefs[0].visible = !value;
-            })
-            .publishReplay(1)
-            .refCount();
+            }),
+            publishReplay(1),
+            refCount()
+        );
 
-        this.shortCaches$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortCaches);
+        this.shortCaches$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCurrentShortCaches);
 
         /** @type {Observable<ig.config.model.DomainModel>} */
-        this.originalItem$ = this.itemID$.distinctUntilChanged().switchMap((id) => {
-            return this.ConfigureState.state$.let(this.ConfigSelectors.selectModelToEdit(id));
-        }).distinctUntilChanged().publishReplay(1).refCount();
+        this.originalItem$ = this.itemID$.pipe(
+            distinctUntilChanged(),
+            switchMap((id) => {
+                return this.ConfigureState.state$.pipe(this.ConfigSelectors.selectModelToEdit(id));
+            }),
+            distinctUntilChanged(),
+            publishReplay(1),
+            refCount()
+        );
 
-        this.isNew$ = this.itemID$.map((id) => id === 'new');
+        this.isNew$ = this.itemID$.pipe(map((id) => id === 'new'));
 
         this.itemEditTitle$ = combineLatest(this.isNew$, this.originalItem$, (isNew, item) => {
             return `${isNew ? 'Create' : 'Edit'} model ${!isNew && get(item, 'valueType') ? `‘${get(item, 'valueType')}’` : ''}`;
@@ -131,7 +138,7 @@ export default class PageConfigureAdvancedModels {
             loadedItems$: this.shortItems$
         });
 
-        this.tableActions$ = this.selectionManager.selectedItemIDs$.map((selectedItems) => [
+        this.tableActions$ = this.selectionManager.selectedItemIDs$.pipe(map((selectedItems) => [
             {
                 action: 'Clone',
                 click: () => this.clone(selectedItems),
@@ -144,12 +151,12 @@ export default class PageConfigureAdvancedModels {
                 },
                 available: true
             }
-        ]);
+        ]));
 
         this.subscription = merge(
             this.originalItem$,
-            this.selectionManager.editGoes$.do((id) => this.edit(id)),
-            this.selectionManager.editLeaves$.do((options) => this.$state.go('base.configuration.edit.advanced.models', null, options))
+            this.selectionManager.editGoes$.pipe(tap((id) => this.edit(id))),
+            this.selectionManager.editLeaves$.pipe(tap((options) => this.$state.go('base.configuration.edit.advanced.models', null, options)))
         ).subscribe();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-basic/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-basic/controller.js b/modules/web-console/frontend/app/components/page-configure-basic/controller.js
index f5515fb..14b3a69 100644
--- a/modules/web-console/frontend/app/components/page-configure-basic/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-basic/controller.js
@@ -15,8 +15,8 @@
  * limitations under the License.
  */
 
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/operator/map';
+import {forkJoin, merge} from 'rxjs';
+import {map, tap, pluck, take, filter, distinctUntilChanged, switchMap, publishReplay, refCount} from 'rxjs/operators';
 import cloneDeep from 'lodash/cloneDeep';
 import get from 'lodash/get';
 import naturalCompare from 'natural-compare-lite';
@@ -88,45 +88,64 @@ export default class PageConfigureBasicController {
 
         $transition$.onSuccess({}, () => this.reset());
 
-        return Observable.forkJoin(
-            this.ConfigureState.state$.pluck('edit', 'changes').take(1),
-            this.clusterID$.switchMap((id) => this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterShortCaches(id))).take(1),
-            this.shortCaches$.take(1)
-        ).toPromise()
-        .then(([changes, originalShortCaches, currentCaches]) => {
-            return this.ConfigChangesGuard.guard(
-                {
-                    cluster: this.Clusters.normalize(this.originalCluster),
-                    caches: originalShortCaches.map(this.Caches.normalize)
-                },
-                {
-                    cluster: {...this.Clusters.normalize(this.clonedCluster), caches: changes.caches.ids},
-                    caches: currentCaches.map(this.Caches.normalize)
-                }
-            );
-        });
+        return forkJoin(
+            this.ConfigureState.state$.pipe(pluck('edit', 'changes'), take(1)),
+            this.clusterID$.pipe(
+                switchMap((id) => this.ConfigureState.state$.pipe(this.ConfigSelectors.selectClusterShortCaches(id))),
+                take(1)
+            ),
+            this.shortCaches$.pipe(take(1))
+        )
+            .toPromise()
+            .then(([changes, originalShortCaches, currentCaches]) => {
+                return this.ConfigChangesGuard.guard(
+                    {
+                        cluster: this.Clusters.normalize(this.originalCluster),
+                        caches: originalShortCaches.map(this.Caches.normalize)
+                    },
+                    {
+                        cluster: {...this.Clusters.normalize(this.clonedCluster), caches: changes.caches.ids},
+                        caches: currentCaches.map(this.Caches.normalize)
+                    }
+                );
+            });
     }
 
     $onInit() {
         this.onBeforeTransition = this.$uiRouter.transitionService.onBefore({}, (t) => this._uiCanExit(t));
 
-        this.memorySizeInputVisible$ = this.IgniteVersion.currentSbj
-            .map((version) => this.IgniteVersion.since(version.ignite, '2.0.0'));
+        this.memorySizeInputVisible$ = this.IgniteVersion.currentSbj.pipe(
+            map((version) => this.IgniteVersion.since(version.ignite, '2.0.0'))
+        );
 
-        const clusterID$ = this.$uiRouter.globals.params$.take(1).pluck('clusterID').filter((v) => v).take(1);
+        const clusterID$ = this.$uiRouter.globals.params$.pipe(
+            take(1),
+            pluck('clusterID'),
+            filter((v) => v),
+            take(1)
+        );
         this.clusterID$ = clusterID$;
 
-        this.isNew$ = this.$uiRouter.globals.params$.pluck('clusterID').map((id) => id === 'new');
-        this.shortCaches$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectCurrentShortCaches);
-        this.shortClusters$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectShortClustersValue());
-        this.originalCluster$ = clusterID$.distinctUntilChanged().switchMap((id) => {
-            return this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterToEdit(id));
-        }).distinctUntilChanged().publishReplay(1).refCount();
-
-        this.subscription = Observable.merge(
-            this.shortCaches$.map((caches) => caches.sort((a, b) => naturalCompare(a.name, b.name))).do((v) => this.shortCaches = v),
-            this.shortClusters$.do((v) => this.shortClusters = v),
-            this.originalCluster$.do((v) => {
+        this.isNew$ = this.$uiRouter.globals.params$.pipe(pluck('clusterID'), map((id) => id === 'new'));
+        this.shortCaches$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCurrentShortCaches);
+        this.shortClusters$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectShortClustersValue());
+        this.originalCluster$ = clusterID$.pipe(
+            distinctUntilChanged(),
+            switchMap((id) => {
+                return this.ConfigureState.state$.pipe(this.ConfigSelectors.selectClusterToEdit(id));
+            }),
+            distinctUntilChanged(),
+            publishReplay(1),
+            refCount()
+        );
+
+        this.subscription = merge(
+            this.shortCaches$.pipe(
+                map((caches) => caches.sort((a, b) => naturalCompare(a.name, b.name))),
+                tap((v) => this.shortCaches = v)
+            ),
+            this.shortClusters$.pipe(tap((v) => this.shortClusters = v)),
+            this.originalCluster$.pipe(tap((v) => {
                 this.originalCluster = v;
                 // clonedCluster should be set only when particular cluster edit starts.
                 // 
@@ -136,7 +155,7 @@ export default class PageConfigureBasicController {
                 // made by user and we don't want that. Advanced configuration forms do the same too.
                 if (get(v, '_id') !== get(this.clonedCluster, '_id')) this.clonedCluster = cloneDeep(v);
                 this.defaultMemoryPolicy = this.Clusters.getDefaultClusterMemoryPolicy(this.clonedCluster);
-            })
+            }))
         ).subscribe();
 
         this.formActionsMenu = [

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-basic/controller.spec.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-basic/controller.spec.js b/modules/web-console/frontend/app/components/page-configure-basic/controller.spec.js
index a35eb50..a4a1d30 100644
--- a/modules/web-console/frontend/app/components/page-configure-basic/controller.spec.js
+++ b/modules/web-console/frontend/app/components/page-configure-basic/controller.spec.js
@@ -19,10 +19,8 @@ import {suite, test} from 'mocha';
 import {assert} from 'chai';
 import {spy} from 'sinon';
 
-import {TestScheduler} from 'rxjs/testing/TestScheduler';
-import {Subject} from 'rxjs/Subject';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import {Subscriber} from 'rxjs/Subscriber';
+import {TestScheduler} from 'rxjs/testing';
+import {Subscriber, Subject, BehaviorSubject} from 'rxjs';
 import Controller from './controller';
 
 const mocks = () => new Map([

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure-overview/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-overview/controller.js b/modules/web-console/frontend/app/components/page-configure-overview/controller.js
index e49e5c6..e170112 100644
--- a/modules/web-console/frontend/app/components/page-configure-overview/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-overview/controller.js
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-import {Subject} from 'rxjs/Subject';
+import {Subject} from 'rxjs';
+import {map} from 'rxjs/operators';
 import naturalCompare from 'natural-compare-lite';
 
 const cellTemplate = (state) => `
@@ -81,7 +82,7 @@ export default class PageConfigureOverviewController {
     }
 
     $onInit() {
-        this.shortClusters$ = this.ConfigureState.state$.let(this.ConfigSelectors.selectShortClustersValue());
+        this.shortClusters$ = this.ConfigureState.state$.pipe(this.ConfigSelectors.selectShortClustersValue());
 
         /** @type {Array<uiGrid.IColumnDefOf<ig.config.cluster.ShortCluster>>} */
         this.clustersColumnDefs = [
@@ -140,9 +141,9 @@ export default class PageConfigureOverviewController {
         /** @type {Subject<Array<ig.config.cluster.ShortCluster>>} */
         this.selectedRows$ = new Subject();
 
-        this.selectedRowsIDs$ = this.selectedRows$.map((selectedClusters) => selectedClusters.map((cluster) => cluster._id));
+        this.selectedRowsIDs$ = this.selectedRows$.pipe(map((selectedClusters) => selectedClusters.map((cluster) => cluster._id)));
 
-        this.actions$ = this.selectedRows$.map((selectedClusters) => [
+        this.actions$ = this.selectedRows$.pipe(map((selectedClusters) => [
             {
                 action: 'Edit',
                 click: () => this.editCluster(selectedClusters[0]),
@@ -163,6 +164,6 @@ export default class PageConfigureOverviewController {
                 click: () => this.removeClusters(selectedClusters),
                 available: true
             }
-        ]);
+        ]));
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js b/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
index e4b8253..7181b54 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
@@ -21,7 +21,8 @@ import _ from 'lodash';
 import naturalCompare from 'natural-compare-lite';
 import find from 'lodash/fp/find';
 import get from 'lodash/fp/get';
-import {Observable} from 'rxjs/Observable';
+import {race, timer, merge, of, from, combineLatest} from 'rxjs';
+import {tap, filter, take, pluck, switchMap} from 'rxjs/operators';
 import ObjectID from 'bson-objectid';
 import {uniqueName} from 'app/utils/uniqueName';
 import {defaultNames} from '../../defaultNames';
@@ -126,34 +127,34 @@ export class ModalImportModels {
     }
 
     loadData() {
-        return Observable.of(this.clusterID)
-            .switchMap((id = 'new') => {
-                return this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterToEdit(id, defaultNames.importedCluster));
-            })
-        .switchMap((cluster) => {
-            return (!(cluster.caches || []).length && !(cluster.models || []).length)
-                ? Observable.of({
-                    cluster,
-                    caches: [],
-                    models: []
-                })
-                : Observable.fromPromise(Promise.all([
-                    this.ConfigEffects.etp('LOAD_SHORT_CACHES', {ids: cluster.caches || [], clusterID: cluster._id}),
-                    this.ConfigEffects.etp('LOAD_SHORT_MODELS', {ids: cluster.models || [], clusterID: cluster._id})
-                ]))
-                .switchMap(() => {
-                    return Observable.combineLatest(
-                        this.ConfigureState.state$.let(this.ConfigSelectors.selectShortCachesValue()),
-                        this.ConfigureState.state$.let(this.ConfigSelectors.selectShortModelsValue()),
-                        (caches, models) => ({
-                            cluster,
-                            caches,
-                            models
-                        })
-                    ).take(1);
-                });
-        })
-        .take(1);
+        return of(this.clusterID).pipe(
+            switchMap((id = 'new') => {
+                return this.ConfigureState.state$.pipe(this.ConfigSelectors.selectClusterToEdit(id, defaultNames.importedCluster));
+            }),
+            switchMap((cluster) => {
+                return (!(cluster.caches || []).length && !(cluster.models || []).length)
+                    ? of({
+                        cluster,
+                        caches: [],
+                        models: []
+                    })
+                    : from(Promise.all([
+                        this.ConfigEffects.etp('LOAD_SHORT_CACHES', {ids: cluster.caches || [], clusterID: cluster._id}),
+                        this.ConfigEffects.etp('LOAD_SHORT_MODELS', {ids: cluster.models || [], clusterID: cluster._id})
+                    ])).pipe(switchMap(() => {
+                        return combineLatest(
+                            this.ConfigureState.state$.pipe(this.ConfigSelectors.selectShortCachesValue()),
+                            this.ConfigureState.state$.pipe(this.ConfigSelectors.selectShortModelsValue()),
+                            (caches, models) => ({
+                                cluster,
+                                caches,
+                                models
+                            })
+                        ).pipe(take(1));
+                    }));
+            }),
+            take(1)
+        );
     }
 
     saveBatch(batch) {
@@ -169,15 +170,20 @@ export class ModalImportModels {
             prevActions: []
         });
 
-        this.saveSubscription = Observable.race(
-            this.ConfigureState.actions$.filter((a) => a.type === 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK')
-                .do(() => this.onHide()),
-            this.ConfigureState.actions$.filter((a) => a.type === 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_ERR')
+        this.saveSubscription = race(
+            this.ConfigureState.actions$.pipe(
+                filter((a) => a.type === 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_OK'),
+                tap(() => this.onHide())
+            ),
+            this.ConfigureState.actions$.pipe(
+                filter((a) => a.type === 'ADVANCED_SAVE_COMPLETE_CONFIGURATION_ERR')
+            )
+        ).pipe(
+            take(1),
+            tap(() => {
+                this.Loading.finish('importDomainFromDb');
+            })
         )
-        .take(1)
-        .do(() => {
-            this.Loading.finish('importDomainFromDb');
-        })
         .subscribe();
     }
 
@@ -231,18 +237,23 @@ export class ModalImportModels {
         if (this.loadedCaches[cacheID])
             return;
 
-        return this.onCacheSelectSubcription = Observable.merge(
-            Observable.timer(0, 1).take(1)
-                .do(() => this.ConfigureState.dispatchAction({type: 'LOAD_CACHE', cacheID})),
-            Observable.race(
-                this.ConfigureState.actions$
-                    .filter((a) => a.type === 'LOAD_CACHE_OK' && a.cache._id === cacheID).pluck('cache')
-                    .do((cache) => {
+        return this.onCacheSelectSubcription = merge(
+            timer(0, 1).pipe(
+                take(1),
+                tap(() => this.ConfigureState.dispatchAction({type: 'LOAD_CACHE', cacheID}))
+            ),
+            race(
+                this.ConfigureState.actions$.pipe(
+                    filter((a) => a.type === 'LOAD_CACHE_OK' && a.cache._id === cacheID),
+                    pluck('cache'),
+                    tap((cache) => {
                         this.loadedCaches[cacheID] = cache;
-                    }),
-                this.ConfigureState.actions$
-                    .filter((a) => a.type === 'LOAD_CACHE_ERR' && a.action.cacheID === cacheID)
-            ).take(1)
+                    })
+                ),
+                this.ConfigureState.actions$.pipe(
+                    filter((a) => a.type === 'LOAD_CACHE_ERR' && a.action.cacheID === cacheID)
+                )
+            ).pipe(take(1))
         )
         .subscribe();
     }
@@ -291,7 +302,7 @@ export class ModalImportModels {
 
         this.$scope.importCommon = {};
 
-        this.subscription = this.loadData().do((data) => {
+        this.subscription = this.loadData().pipe(tap((data) => {
             this.$scope.caches = _mapCaches(data.caches);
             this.$scope.domains = data.models;
             this.caches = data.caches;
@@ -306,7 +317,7 @@ export class ModalImportModels {
             }
             this.$scope.$watch('importCommon.action', this._fillCommonCachesOrTemplates(this.$scope.importCommon), true);
             this.$scope.importCommon.action = IMPORT_DM_NEW_CACHE;
-        }).subscribe();
+        })).subscribe();
 
         // New
         this.loadedCaches = {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/controller.js b/modules/web-console/frontend/app/components/page-configure/controller.js
index 91bdf50..7a83aa6 100644
--- a/modules/web-console/frontend/app/components/page-configure/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure/controller.js
@@ -16,10 +16,8 @@
  */
 
 import get from 'lodash/get';
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/observable/merge';
-import {combineLatest} from 'rxjs/observable/combineLatest';
-import 'rxjs/add/operator/distinctUntilChanged';
+import {Observable, combineLatest} from 'rxjs';
+import {pluck, switchMap, map} from 'rxjs/operators';
 import {default as ConfigureState} from './services/ConfigureState';
 import {default as ConfigSelectors} from './store/selectors';
 
@@ -39,9 +37,12 @@ export default class PageConfigureController {
 
     $onInit() {
         /** @type {Observable<string>} */
-        this.clusterID$ = this.$uiRouter.globals.params$.pluck('clusterID');
-        const cluster$ = this.clusterID$.switchMap((id) => this.ConfigureState.state$.let(this.ConfigSelectors.selectCluster(id)));
-        const isNew$ = this.clusterID$.map((v) => v === 'new');
+        this.clusterID$ = this.$uiRouter.globals.params$.pipe(pluck('clusterID'));
+
+        const cluster$ = this.clusterID$.pipe(switchMap((id) => this.ConfigureState.state$.pipe(this.ConfigSelectors.selectCluster(id))));
+
+        const isNew$ = this.clusterID$.pipe(map((v) => v === 'new'));
+
         this.clusterName$ = combineLatest(cluster$, isNew$, (cluster, isNew) => {
             return `${isNew ? 'Create' : 'Edit'} cluster configuration ${isNew ? '' : `‘${get(cluster, 'name')}’`}`;
         });

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/index.d.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/index.d.ts b/modules/web-console/frontend/app/components/page-configure/index.d.ts
index 96773fa..c0eca6a 100644
--- a/modules/web-console/frontend/app/components/page-configure/index.d.ts
+++ b/modules/web-console/frontend/app/components/page-configure/index.d.ts
@@ -15,11 +15,10 @@
  * limitations under the License.
  */
 
-import {Observable} from 'rxjs/Observable'
 /// <reference path="./types/uirouter.d.ts" />
 
 declare namespace ig {
-    type menu<T> = Array<{value: T, label: string}>
+    type menu < T > = Array<{value: T, label: string}>;
 
     namespace config {
         namespace formFieldSize {
@@ -27,11 +26,12 @@ declare namespace ig {
                 label: string,
                 value: number
             }
-            type ISizeType = Array<ISizeTypeOption>
+            type ISizeType = Array<ISizeTypeOption>;
             interface ISizeTypes {
                 [name: string]: ISizeType
             }
         }
+
         namespace cluster {
             export type DiscoveryKinds = 'Vm'
                 | 'Multicast'
@@ -41,14 +41,14 @@ declare namespace ig {
                 | 'Jdbc'
                 | 'SharedFs'
                 | 'ZooKeeper'
-                | 'Kubernetes'
+                | 'Kubernetes';
 
             export type LoadBalancingKinds = 'RoundRobin'
                 | 'Adaptive'
                 | 'WeightedRandom'
-                | 'Custom'
+                | 'Custom';
 
-            export type FailoverSPIs = 'JobStealing' | 'Never' | 'Always' | 'Custom'
+            export type FailoverSPIs = 'JobStealing' | 'Never' | 'Always' | 'Custom';
 
             export interface ShortCluster {
                 _id: string,
@@ -59,9 +59,10 @@ declare namespace ig {
                 igfs: number
             }
         }
+
         namespace cache {
-            type CacheModes = 'PARTITIONED' | 'REPLICATED' | 'LOCAL'
-            type AtomicityModes = 'ATOMIC' | 'TRANSACTIONAL'
+            type CacheModes = 'PARTITIONED' | 'REPLICATED' | 'LOCAL';
+            type AtomicityModes = 'ATOMIC' | 'TRANSACTIONAL';
             export interface ShortCache {
                 _id: string,
                 cacheMode: CacheModes,
@@ -69,9 +70,10 @@ declare namespace ig {
                 backups: number
             }
         }
+
         namespace model {
-            type QueryMetadataTypes = 'Annotations' | 'Configuration'
-            type DomainModelKinds = 'query' | 'store' | 'both'
+            type QueryMetadataTypes = 'Annotations' | 'Configuration';
+            type DomainModelKinds = 'query' | 'store' | 'both';
             export interface KeyField {
                 databaseFieldName: string,
                 databaseFieldType: string,
@@ -92,7 +94,7 @@ declare namespace ig {
                 field: string,
                 alias: string
             }
-            type IndexTypes = 'SORTED' | 'FULLTEXT' | 'GEOSPATIAL'
+            type IndexTypes = 'SORTED' | 'FULLTEXT' | 'GEOSPATIAL';
             export interface IndexField {
                 _id: string,
                 name?: string,
@@ -135,8 +137,9 @@ declare namespace ig {
                 hasIndex: boolean
             }
         }
+
         namespace igfs {
-            type DefaultModes = 'PRIMARY' | 'PROXY' | 'DUAL_SYNC' | 'DUAL_ASYNC'
+            type DefaultModes = 'PRIMARY' | 'PROXY' | 'DUAL_SYNC' | 'DUAL_ASYNC';
             export interface ShortIGFS {
                 _id: string,
                 name: string,
@@ -148,4 +151,4 @@ declare namespace ig {
 }
 
 export as namespace ig
-export = ig
\ No newline at end of file
+export = ig

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/index.ts b/modules/web-console/frontend/app/components/page-configure/index.ts
index dd2ad20..a2f76e1 100644
--- a/modules/web-console/frontend/app/components/page-configure/index.ts
+++ b/modules/web-console/frontend/app/components/page-configure/index.ts
@@ -49,23 +49,15 @@ import pcSplitButton from './components/pc-split-button';
 import {errorState} from './transitionHooks/errorState';
 import {default as ActivitiesData} from 'app/core/activities/Activities.data';
 
-import 'rxjs/add/operator/withLatestFrom';
-import 'rxjs/add/operator/skip';
-
-import {Observable} from 'rxjs/Observable';
+import {withLatestFrom, tap, filter, scan} from 'rxjs/operators';
 
 import {navigationMenuItem, AppStore} from '../../store';
 import {default as configurationIcon} from './icons/configuration.icon.svg';
 import {default as IconsService} from '../ignite-icon/service';
 
-Observable.prototype.debug = function(l) {
-    return this.do((v) => console.log(l, v), (e) => console.error(l, e), () => console.log(l, 'completed'));
-};
-
 import {
     editReducer2,
     shortObjectsReducer,
-    reducer,
     editReducer,
     loadingReducer,
     itemsEditReducerFactory,
@@ -83,7 +75,6 @@ import {
     refsReducer
 } from './reducer';
 
-import {reducer as reduxDevtoolsReducer, devTools} from './reduxDevtoolsIntegration';
 import {registerStates} from './states';
 
 /**
@@ -156,18 +147,19 @@ export default angular
             }
         });
 
-        const la = ConfigureState.actions$.scan((acc, action) => [...acc, action], []);
+        const la = ConfigureState.actions$.pipe(scan((acc, action) => [...acc, action], []));
 
-        ConfigureState.actions$
-            .filter((a) => a.type === 'UNDO_ACTIONS')
-            .withLatestFrom(la, ({actions}, actionsWindow, initialState) => {
+        ConfigureState.actions$.pipe(
+            filter((a) => a.type === 'UNDO_ACTIONS'),
+            withLatestFrom(la, ({actions}, actionsWindow, initialState) => {
                 return {
                     type: 'APPLY_ACTIONS_UNDO',
                     state: actionsWindow.filter((a) => !actions.includes(a)).reduce(ConfigureState._combinedReducer, {})
                 };
-            })
-            .do((a) => ConfigureState.dispatchAction(a))
-            .subscribe();
+            }),
+            tap((a) => ConfigureState.dispatchAction(a))
+        )
+        .subscribe();
         ConfigEffects.connect();
 
         store.dispatch(navigationMenuItem({

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/services/ConfigChangesGuard.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/ConfigChangesGuard.js b/modules/web-console/frontend/app/components/page-configure/services/ConfigChangesGuard.js
index 7e2df80..cda9965 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/ConfigChangesGuard.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/ConfigChangesGuard.js
@@ -15,7 +15,8 @@
  * limitations under the License.
  */
 
-import {of} from 'rxjs/observable/of';
+import {of} from 'rxjs';
+import {switchMap, catchError} from 'rxjs/operators';
 import {Confirm} from 'app/services/Confirm.service';
 import {DiffPatcher} from 'jsondiffpatch';
 import {html} from 'jsondiffpatch/public/build/jsondiffpatch-formatters.js';
@@ -92,9 +93,9 @@ export default class ConfigChangesGuard {
         if (!a && !b)
             return Promise.resolve(true);
 
-        return of(this._hasChanges(a, b))
-            .switchMap((changes) => changes ? this._confirm(changes).then(() => true) : of(true))
-            .catch(() => of(false))
-            .toPromise();
+        return of(this._hasChanges(a, b)).pipe(
+            switchMap((changes) => changes ? this._confirm(changes).then(() => true) : of(true)),
+            catchError(() => of(false))
+        ).toPromise();
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/services/ConfigSelectionManager.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/ConfigSelectionManager.js b/modules/web-console/frontend/app/components/page-configure/services/ConfigSelectionManager.js
index 243302a..b5b46d6 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/ConfigSelectionManager.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/ConfigSelectionManager.js
@@ -15,12 +15,9 @@
  * limitations under the License.
  */
 
-import {Observable} from 'rxjs/Observable';
-import {merge} from 'rxjs/observable/merge';
+import {Observable, merge} from 'rxjs';
+import {share, distinctUntilChanged, startWith, filter, map, pluck, withLatestFrom, mapTo} from 'rxjs/operators';
 import {RejectType} from '@uirouter/angularjs';
-import 'rxjs/add/operator/share';
-import 'rxjs/add/operator/mapTo';
-import 'rxjs/add/operator/startWith';
 import isEqual from 'lodash/isEqual';
 
 /**
@@ -35,57 +32,63 @@ export default function configSelectionManager($transitions) {
         // but decides to stay after screen asks for leave confirmation.
         const abortedTransitions$ = Observable.create((observer) => {
             return $transitions.onError({}, (t) => observer.next(t));
-        })
-        .filter((t) => t.error().type === RejectType.ABORTED);
+        }).pipe(filter((t) => t.error().type === RejectType.ABORTED));
 
-        const firstItemID$ = visibleRows$.withLatestFrom(itemID$, loadedItems$)
-            .filter(([rows, id, items]) => !id && rows && rows.length === items.length)
-            .pluck('0', '0', 'entity', '_id');
+        const firstItemID$ = visibleRows$.pipe(
+            withLatestFrom(itemID$, loadedItems$),
+            filter(([rows, id, items]) => !id && rows && rows.length === items.length),
+            pluck('0', '0', 'entity', '_id')
+        );
 
-        const selectedItemRowsIDs$ = selectedItemRows$.map((rows) => rows.map((r) => r._id)).share();
-        const singleSelectionEdit$ = selectedItemRows$.filter((r) => r && r.length === 1).pluck('0', '_id');
-        const selectedMultipleOrNone$ = selectedItemRows$.filter((r) => r.length > 1 || r.length === 0);
-        const loadedItemIDs$ = loadedItems$.map((rows) => new Set(rows.map((r) => r._id))).share();
-        const currentItemWasRemoved$ = loadedItemIDs$
-            .withLatestFrom(
-                itemID$.filter((v) => v && v !== 'new'),
+        const selectedItemRowsIDs$ = selectedItemRows$.pipe(map((rows) => rows.map((r) => r._id)), share());
+        const singleSelectionEdit$ = selectedItemRows$.pipe(filter((r) => r && r.length === 1), pluck('0', '_id'));
+        const selectedMultipleOrNone$ = selectedItemRows$.pipe(filter((r) => r.length > 1 || r.length === 0));
+        const loadedItemIDs$ = loadedItems$.pipe(map((rows) => new Set(rows.map((r) => r._id))), share());
+        const currentItemWasRemoved$ = loadedItemIDs$.pipe(
+            withLatestFrom(
+                itemID$.pipe(filter((v) => v && v !== 'new')),
                 /**
                  * Without startWith currentItemWasRemoved$ won't emit in the following scenario:
                  * 1. User opens items page (no item id in location).
                  * 2. Selection manager commands to edit first item.
                  * 3. User removes said item.
                  */
-                selectedItemRowsIDs$.startWith([])
-            )
-            .filter(([existingIDs, itemID, selectedIDs]) => !existingIDs.has(itemID))
-            .map(([existingIDs, itemID, selectedIDs]) => selectedIDs.filter((id) => id !== itemID))
-            .share();
+                selectedItemRowsIDs$.pipe(startWith([]))
+            ),
+            filter(([existingIDs, itemID, selectedIDs]) => !existingIDs.has(itemID)),
+            map(([existingIDs, itemID, selectedIDs]) => selectedIDs.filter((id) => id !== itemID)),
+            share()
+        );
 
         // Edit first loaded item or when there's only one item selected
-        const editGoes$ = merge(firstItemID$, singleSelectionEdit$)
+        const editGoes$ = merge(firstItemID$, singleSelectionEdit$).pipe(
             // Don't go to non-existing items.
             // Happens when user naviagtes to older history and some items were already removed.
-            .withLatestFrom(loadedItemIDs$).filter(([id, loaded]) => id && loaded.has(id)).pluck('0');
+            withLatestFrom(loadedItemIDs$),
+            filter(([id, loaded]) => id && loaded.has(id)),
+            pluck('0')
+        );
         // Stop edit when multiple or none items are selected or when current item was removed
         const editLeaves$ = merge(
-            selectedMultipleOrNone$.mapTo({}),
-            currentItemWasRemoved$.mapTo({location: 'replace', custom: {justIDUpdate: true}})
-        ).share();
+            selectedMultipleOrNone$.pipe(mapTo({})),
+            currentItemWasRemoved$.pipe(mapTo({location: 'replace', custom: {justIDUpdate: true}}))
+        ).pipe(share());
 
         const selectedItemIDs$ = merge(
             // Select nothing when creating an item or select current item
-            itemID$.filter((id) => id).map((id) => id === 'new' ? [] : [id]),
+            itemID$.pipe(filter((id) => id), map((id) => id === 'new' ? [] : [id])),
             // Restore previous item selection when transition gets aborted
-            abortedTransitions$.withLatestFrom(itemID$, (_, id) => [id]),
+            abortedTransitions$.pipe(withLatestFrom(itemID$, (_, id) => [id])),
             // Select all incoming selected rows
             selectedItemRowsIDs$
-        )
-        // If nothing's selected and there are zero rows, ui-grid will behave as if all rows are selected
-        .startWith([])
-        // Some scenarios cause same item to be selected multiple times in a row,
-        // so it makes sense to filter out duplicate entries
-        .distinctUntilChanged(isEqual)
-        .share();
+        ).pipe(
+            // If nothing's selected and there are zero rows, ui-grid will behave as if all rows are selected
+            startWith([]),
+            // Some scenarios cause same item to be selected multiple times in a row,
+            // so it makes sense to filter out duplicate entries
+            distinctUntilChanged(isEqual),
+            share()
+        );
 
         return {selectedItemIDs$, editGoes$, editLeaves$};
     };

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js b/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
index ed911be..143944c 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
@@ -15,10 +15,8 @@
  * limitations under the License.
  */
 
-import {Subject} from 'rxjs/Subject';
-import {BehaviorSubject} from 'rxjs/BehaviorSubject';
-import 'rxjs/add/operator/do';
-import 'rxjs/add/operator/scan';
+import {Subject, BehaviorSubject} from 'rxjs';
+import {tap, scan} from 'rxjs/operators';
 
 export default class ConfigureState {
     constructor() {
@@ -38,7 +36,10 @@ export default class ConfigureState {
             }
         };
 
-        this.actions$.scan(reducer, {}).do((v) => this.state$.next(v)).subscribe();
+        this.actions$.pipe(
+            scan(reducer, {}),
+            tap((v) => this.state$.next(v))
+        ).subscribe();
     }
 
     addReducer(combineFn) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js b/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
index d81921e..5eaedde 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.js
@@ -15,21 +15,11 @@
  * limitations under the License.
  */
 
-import {Observable} from 'rxjs/Observable';
-import 'rxjs/add/operator/filter';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/take';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/merge';
-import 'rxjs/add/operator/catch';
-import 'rxjs/add/operator/withLatestFrom';
-import 'rxjs/add/observable/empty';
-import 'rxjs/add/observable/of';
-import 'rxjs/add/observable/from';
-import 'rxjs/add/observable/forkJoin';
-import 'rxjs/add/observable/timer';
 import cloneDeep from 'lodash/cloneDeep';
 
+import {merge, timer} from 'rxjs';
+import {take, tap, ignoreElements, filter, map, pluck} from 'rxjs/operators';
+
 import {
     ofType
 } from '../store/effects';
@@ -50,20 +40,25 @@ export default class PageConfigure {
     }
 
     getClusterConfiguration({clusterID, isDemo}) {
-        return Observable.merge(
-            Observable
-                .timer(1)
-                .take(1)
-                .do(() => this.ConfigureState.dispatchAction({type: 'LOAD_COMPLETE_CONFIGURATION', clusterID, isDemo}))
-                .ignoreElements(),
-            this.ConfigureState.actions$.let(ofType('LOAD_COMPLETE_CONFIGURATION_ERR')).take(1).pluck('error').map((e) => Promise.reject(e)),
-            this.ConfigureState.state$
-                .let(this.ConfigSelectors.selectCompleteClusterConfiguration({clusterID, isDemo}))
-                .filter((c) => c.__isComplete)
-                .take(1)
-                .map((data) => ({...data, clusters: [cloneDeep(data.cluster)]}))
-        )
-        .take(1)
+        return merge(
+            timer(1).pipe(
+                take(1),
+                tap(() => this.ConfigureState.dispatchAction({type: 'LOAD_COMPLETE_CONFIGURATION', clusterID, isDemo})),
+                ignoreElements()
+            ),
+            this.ConfigureState.actions$.pipe(
+                ofType('LOAD_COMPLETE_CONFIGURATION_ERR'),
+                take(1),
+                pluck('error'),
+                map((e) => Promise.reject(e))
+            ),
+            this.ConfigureState.state$.pipe(
+                this.ConfigSelectors.selectCompleteClusterConfiguration({clusterID, isDemo}),
+                filter((c) => c.__isComplete),
+                take(1),
+                map((data) => ({...data, clusters: [cloneDeep(data.cluster)]}))
+            )
+        ).pipe(take(1))
         .toPromise();
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.spec.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.spec.js b/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.spec.js
index bc72cd3..145eed6 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.spec.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/PageConfigure.spec.js
@@ -18,11 +18,8 @@
 import {suite, test} from 'mocha';
 import {assert} from 'chai';
 import {spy} from 'sinon';
-import {TestScheduler} from 'rxjs/testing/TestScheduler';
-import {Observable} from 'rxjs/Observable';
-
-import 'rxjs/add/observable/of';
-import 'rxjs/add/observable/throw';
+import {of, throwError} from 'rxjs';
+import {TestScheduler} from 'rxjs/testing';
 
 const mocks = () => new Map([
     ['IgniteConfigurationResource', {}],
@@ -79,7 +76,7 @@ suite.skip('PageConfigure service', () => {
 
             const deps = mocks()
             .set('Clusters', {
-                saveCluster$: (c) => Observable.of({data: 99})
+                saveCluster$: (c) => of({data: 99})
             })
             .set('ConfigureState', {
                 actions$: testScheduler.createHotObservable(actions, values),
@@ -135,8 +132,8 @@ suite.skip('PageConfigure service', () => {
             const deps = mocks()
             .set('Clusters', {
                 saveCluster$: (c) => c.name === values.b.clusters[0].name
-                    ? Observable.of({data: 99})
-                    : Observable.throw()
+                    ? of({data: 99})
+                    : throwError()
             })
             .set('ConfigureState', {
                 actions$: testScheduler.createHotObservable(actions, values),
@@ -188,7 +185,7 @@ suite.skip('PageConfigure service', () => {
                 dispatchAction: spy()
             })
             .set('Clusters', {
-                removeCluster$: (v) => Observable.of(v)
+                removeCluster$: (v) => of(v)
             });
             const s = new PageConfigure(...deps.values());
 
@@ -232,7 +229,7 @@ suite.skip('PageConfigure service', () => {
                 dispatchAction: spy()
             })
             .set('Clusters', {
-                removeCluster$: (v) => v._id % 2 ? Observable.of(v) : Observable.throw()
+                removeCluster$: (v) => v._id % 2 ? of(v) : throwError()
             });
             const s = new PageConfigure(...deps.values());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d4e1fd1/modules/web-console/frontend/app/components/page-configure/states.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/states.js b/modules/web-console/frontend/app/components/page-configure/states.js
index 3ba5bb7..3b8dec9 100644
--- a/modules/web-console/frontend/app/components/page-configure/states.js
+++ b/modules/web-console/frontend/app/components/page-configure/states.js
@@ -20,19 +20,21 @@ import pageConfigureAdvancedModelsComponent from '../page-configure-advanced/com
 import pageConfigureAdvancedCachesComponent from '../page-configure-advanced/components/page-configure-advanced-caches/component';
 import pageConfigureAdvancedIGFSComponent from '../page-configure-advanced/components/page-configure-advanced-igfs/component';
 
-import {Observable} from 'rxjs/Observable';
+import {Observable, from, combineLatest} from 'rxjs';
+import {switchMap, take, map} from 'rxjs/operators';
 
 const idRegex = `new|[a-z0-9]+`;
 
 const shortCachesResolve = ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', function(ConfigSelectors, ConfigureState, {etp}, $transition$) {
     if ($transition$.params().clusterID === 'new')
         return Promise.resolve();
-    return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
-        .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
-        .switchMap((cluster) => {
+    return from($transition$.injector().getAsync('_cluster')).pipe(
+        switchMap(() => ConfigureState.state$.pipe(ConfigSelectors.selectCluster($transition$.params().clusterID), take(1))),
+        switchMap((cluster) => {
             return etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id});
         })
-        .toPromise();
+    )
+    .toPromise();
 }];
 
 function registerStates($stateProvider) {
@@ -77,17 +79,19 @@ function registerStates($stateProvider) {
         redirectTo: ($transition$) => {
             const [ConfigureState, ConfigSelectors] = ['ConfigureState', 'ConfigSelectors'].map((t) => $transition$.injector().get(t));
             const waitFor = ['_cluster', '_shortClusters'].map((t) => $transition$.injector().getAsync(t));
-            return Observable.fromPromise(Promise.all(waitFor)).switchMap(() => {
-                return Observable.combineLatest(
-                    ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1),
-                    ConfigureState.state$.let(ConfigSelectors.selectShortClusters()).take(1)
-                );
-            })
-            .map(([cluster = {caches: []}, clusters]) => {
-                return (clusters.value.size > 10 || cluster.caches.length > 5)
-                    ? 'base.configuration.edit.advanced'
-                    : 'base.configuration.edit.basic';
-            })
+            return from(Promise.all(waitFor)).pipe(
+                switchMap(() => {
+                    return combineLatest(
+                        ConfigureState.state$.pipe(ConfigSelectors.selectCluster($transition$.params().clusterID), take(1)),
+                        ConfigureState.state$.pipe(ConfigSelectors.selectShortClusters(), take(1))
+                    );
+                }),
+                map(([cluster = {caches: []}, clusters]) => {
+                    return (clusters.value.size > 10 || cluster.caches.length > 5)
+                        ? 'base.configuration.edit.advanced'
+                        : 'base.configuration.edit.basic';
+                })
+            )
             .toPromise();
         },
         failState: 'signin',
@@ -138,16 +142,17 @@ function registerStates($stateProvider) {
                 if ($transition$.params().clusterID === 'new')
                     return Promise.resolve();
 
-                return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
-                    .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
-                    .map((cluster) => {
+                return from($transition$.injector().getAsync('_cluster')).pipe(
+                    switchMap(() => ConfigureState.state$.pipe(ConfigSelectors.selectCluster($transition$.params().clusterID), take(1))),
+                    map((cluster) => {
                         return Promise.all([
                             etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
                             etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id}),
                             etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
                         ]);
                     })
-                    .toPromise();
+                )
+                .toPromise();
             }]
         },
         resolvePolicy: {
@@ -163,6 +168,7 @@ function registerStates($stateProvider) {
         resolve: {
             _cache: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
                 const {clusterID, cacheID} = $transition$.params();
+
                 if (cacheID === 'new')
                     return Promise.resolve();
 
@@ -188,15 +194,15 @@ function registerStates($stateProvider) {
                 if ($transition$.params().clusterID === 'new')
                     return Promise.resolve();
 
-                return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
-                    .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
-                    .map((cluster) => {
+                return from($transition$.injector().getAsync('_cluster')).pipe(
+                    switchMap(() => ConfigureState.state$.pipe(ConfigSelectors.selectCluster($transition$.params().clusterID), take(1))),
+                    map((cluster) => {
                         return Promise.all([
                             etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
                             etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id})
                         ]);
                     })
-                    .toPromise();
+                ).toPromise();
             }]
         },
         resolvePolicy: {
@@ -235,14 +241,14 @@ function registerStates($stateProvider) {
                 if ($transition$.params().clusterID === 'new')
                     return Promise.resolve();
 
-                return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
-                    .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
-                    .map((cluster) => {
+                return from($transition$.injector().getAsync('_cluster')).pipe(
+                    switchMap(() => ConfigureState.state$.pipe(ConfigSelectors.selectCluster($transition$.params().clusterID), take(1))),
+                    map((cluster) => {
                         return Promise.all([
                             etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
                         ]);
                     })
-                    .toPromise();
+                ).toPromise();
             }]
         },
         resolvePolicy: {


[13/52] [abbrv] ignite git commit: IGNITE-4890 Support Cassandra message 'unconfigured columnfamily'. Fixes #1719.

Posted by sb...@apache.org.
IGNITE-4890 Support Cassandra message 'unconfigured columnfamily'. Fixes #1719.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/84a8e810
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/84a8e810
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/84a8e810

Branch: refs/heads/ignite-627
Commit: 84a8e8108f973719f1f05e41818ec3ac93312d1b
Parents: 0eb5bcc
Author: Venky Kandaswamy <vk...@172.28.88.26>
Authored: Tue Dec 18 10:54:36 2018 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Tue Dec 18 10:54:36 2018 +0700

----------------------------------------------------------------------
 .../ignite/cache/store/cassandra/common/CassandraHelper.java     | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/84a8e810/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
----------------------------------------------------------------------
diff --git a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
index 9492cec..c3981b3 100644
--- a/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
+++ b/modules/cassandra/store/src/main/java/org/apache/ignite/cache/store/cassandra/common/CassandraHelper.java
@@ -49,6 +49,9 @@ public class CassandraHelper {
 
     /** Cassandra error message if specified table doesn't exist. */
     private static final String TABLE_EXIST_ERROR2 = "Error preparing query, got ERROR INVALID: unconfigured table";
+    
+    /** Cassandra error message if specified table doesn't exist. */
+    private static final Pattern TABLE_EXIST_ERROR3 = Pattern.compile("unconfigured columnfamily [0-9a-zA-Z_]+");
 
     /** Cassandra error message if trying to use prepared statement created from another session. */
     private static final String PREP_STATEMENT_CLUSTER_INSTANCE_ERROR = "You may have used a PreparedStatement that " +
@@ -97,6 +100,7 @@ public class CassandraHelper {
         while (e != null) {
             if (e instanceof InvalidQueryException &&
                 (TABLE_EXIST_ERROR1.matcher(e.getMessage()).matches() ||
+                	TABLE_EXIST_ERROR3.matcher(e.getMessage()).matches() ||
                     KEYSPACE_EXIST_ERROR1.matcher(e.getMessage()).matches() ||
                     KEYSPACE_EXIST_ERROR2.matcher(e.getMessage()).matches()))
                 return true;


[02/52] [abbrv] ignite git commit: IGNITE-10239 Update navigation and top menu. - Fixes #5630.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/permanent-notifications/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/permanent-notifications/style.scss b/modules/web-console/frontend/app/components/permanent-notifications/style.scss
new file mode 100644
index 0000000..e40f21a
--- /dev/null
+++ b/modules/web-console/frontend/app/components/permanent-notifications/style.scss
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+permanent-notifications {
+    display: block;
+
+    @import "./../../../public/stylesheets/variables.scss";
+
+    .wch-notification {
+        line-height: 16px;
+        padding: 7px;
+        background: $brand-warning;
+        font-size: 16px;
+        text-align: center;
+
+        a {
+            color: $brand-info;
+        }
+
+        &+.wch-notification {
+            border-top: 1px solid darken($brand-warning, 15%);
+        }
+    }
+
+    .wch-notification.wch-notification--demo {
+        color: white;
+        background: $ignite-brand-success;
+        border: none;
+
+        a {
+            color: white;
+            text-decoration: underline;
+
+            &:hover {
+                color: #ffab40;
+                text-decoration: none;
+            }
+        }
+    }    
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/permanent-notifications/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/permanent-notifications/template.pug b/modules/web-console/frontend/app/components/permanent-notifications/template.pug
new file mode 100644
index 0000000..6abe611
--- /dev/null
+++ b/modules/web-console/frontend/app/components/permanent-notifications/template.pug
@@ -0,0 +1,23 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+.wch-notification(ng-show='$ctrl.UserNotifications.isShown && $ctrl.UserNotifications.message' ng-bind-html='$ctrl.UserNotifications.message')
+
+.wch-notification(ng-show='$ctrl.$rootScope.user.becomeUsed')
+    | You are currently viewing user #[strong {{$ctrl.$rootScope.user.firstName}} {{$ctrl.$rootScope.user.lastName}}] as administrator. #[a(ng-click='$ctrl.$rootScope.revertIdentity()') Revert to your identity?]
+
+.wch-notification.wch-notification--demo(ng-if='$ctrl.$rootScope.IgniteDemoMode')
+    | You are now in #[b Demo Mode]. #[a(ng-click='$ctrl.closeDemo()') Close Demo?]

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/timed-redirection/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/timed-redirection/style.scss b/modules/web-console/frontend/app/components/timed-redirection/style.scss
index 5b0ecfd..487fa2d 100644
--- a/modules/web-console/frontend/app/components/timed-redirection/style.scss
+++ b/modules/web-console/frontend/app/components/timed-redirection/style.scss
@@ -23,6 +23,7 @@ timed-redirection {
   display: flex;
   flex-direction: column;
   flex: 1;
+  min-height: 100%;
 
   .timed-redirection--wrapper {
       text-align: center;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/component.js b/modules/web-console/frontend/app/components/web-console-footer/component.js
index 40a1051..bb2f7f7 100644
--- a/modules/web-console/frontend/app/components/web-console-footer/component.js
+++ b/modules/web-console/frontend/app/components/web-console-footer/component.js
@@ -17,7 +17,9 @@
 
 import template from './template.pug';
 import './style.scss';
+import controller from './controller';
 
 export default {
-    template
+    template,
+    controller
 };

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/component.js b/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/component.js
deleted file mode 100644
index 40a1051..0000000
--- a/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/component.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './template.pug';
-import './style.scss';
-
-export default {
-    template
-};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/style.scss b/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/style.scss
deleted file mode 100644
index 47b88af..0000000
--- a/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/style.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-/*!
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-web-console-footer-links {
-    margin-left: auto;
-
-    a + a {
-        margin-left: 5px;
-
-        &:before {
-            content: '|';
-            display: inline-block;
-            margin-right: 5px;
-            color: #fafafa;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/template.pug b/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/template.pug
deleted file mode 100644
index 5c04467..0000000
--- a/modules/web-console/frontend/app/components/web-console-footer/components/web-console-footer-links/template.pug
+++ /dev/null
@@ -1,17 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
-a(href="/api/v1/downloads/agent" target="_self") Download Agent

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/controller.ts b/modules/web-console/frontend/app/components/web-console-footer/controller.ts
new file mode 100644
index 0000000..0811748
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-footer/controller.ts
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {default as Version} from '../../services/Version.service';
+
+export default class WebConsoleFooter {
+    static $inject = ['IgniteVersion', '$rootScope']
+    constructor(private Version: Version, private $root: ng.IRootScopeService) {}
+    year = new Date().getFullYear()
+    get userIsAuthorized() {
+        return !!this.$root.user;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/index.js b/modules/web-console/frontend/app/components/web-console-footer/index.js
index e26b602..4fa4617 100644
--- a/modules/web-console/frontend/app/components/web-console-footer/index.js
+++ b/modules/web-console/frontend/app/components/web-console-footer/index.js
@@ -17,9 +17,16 @@
 
 import angular from 'angular';
 import component from './component';
-import componentLinks from './components/web-console-footer-links/component';
 
 export default angular
     .module('ignite-console.web-console-footer', [])
     .component('webConsoleFooter', component)
-    .component('webConsoleFooterLinks', componentLinks);
+    .directive('webConsoleFooterPageBottom', function() {
+        return {
+            restrict: 'C',
+            link(scope, el) {
+                el.parent().addClass('wrapper-public');
+                scope.$on('$destroy', () => el.parent().removeClass('wrapper-public'));
+            }
+        };
+    });

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/style.scss b/modules/web-console/frontend/app/components/web-console-footer/style.scss
index f3de59f..fe5eb64 100644
--- a/modules/web-console/frontend/app/components/web-console-footer/style.scss
+++ b/modules/web-console/frontend/app/components/web-console-footer/style.scss
@@ -16,46 +16,87 @@
  */
 
 web-console-footer {
-    display: block;
-    color: #fafafa;
-    background: linear-gradient(to bottom, #5f5e5e, #393939);
-    font-family: Roboto;
     font-size: 12px;
-    font-weight: 300;
-    padding-top: 12px;
-    padding-bottom: 12px;
 
-    p {
-        margin-bottom: 0;
+    .#{&}__legal {
+        color: rgba(0, 0, 0, 0.54);
+    }
+
+    &.web-console-footer__sidebar-closed {
+        width: var(--width-narrow);
+        border-top: 1px solid #dddddd;
+    
+        a {
+            color: var(--inactive-link-color);
+            margin-left: auto;
+            margin-right: auto;
+            width: 40px;
+            height: 40px;
+            display: inline-flex;
+            align-items: center;
+            justify-content: center;
 
-        &:first-of-type {
-            margin-bottom: 5px;
+            &:hover, &:focus {
+                color: var(--active-link-color);
+            }
+            [ignite-icon] {
+                transform: scale(1.25);
+            }
+        }
+    
+        .web-console-footer__sidebar-stuff {
+            position: sticky;
+            display: grid;
+            grid-row-gap: 15px;
+            padding-top: 20px;
+            padding-bottom: 20px;
+        }
+    
+        .web-console-footer__regular-stuff {
+            display: none;
         }
     }
 
-    .wcf-content {
+    &.web-console-footer__sidebar-opened {
+        width: var(--width-wide);
         display: flex;
-        flex-direction: row;
-        align-items: center;
+        flex-direction: column;
+        padding: 27px 18px 27px 27px;
 
-        & > :nth-child(2) {
-            margin-left: auto;
+        .web-console-footer__sidebar-stuff {
+            display: none;
+        }        
+    
+        .web-console-footer__regular-stuff {
+            display: block;
         }
     }
+}
+
+.web-console-footer__page-bottom {
+    grid-area: footer;
+    color: #fafafa;
+    background: #393939;
+    font-size: 12px;
+    font-weight: 300;
+    padding: 12px var(--page-side-padding);
+
+    .web-console-footer__sidebar-stuff {
+        display: none;
+    }
 
-    ignite-powered-by-apache {
-        & > a {
-            margin-left: 40px;
-        }
+    p {
+        margin: 0;
     }
 
     a {
-        color: #ee8e89;
-
-        &:hover, &.hover,
-        &:focus, &.focus {
-            color: #ee2b27;
-            text-decoration: none;
+        color: #ee8e89 !important;
+        &:hover, &:focus {
+            color: #ee2b27 !important;
         }
     }
+
+    .web-console-footer__legal {
+        color: inherit;
+    }    
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-footer/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-footer/template.pug b/modules/web-console/frontend/app/components/web-console-footer/template.pug
index aa2812a..2c1495e 100644
--- a/modules/web-console/frontend/app/components/web-console-footer/template.pug
+++ b/modules/web-console/frontend/app/components/web-console-footer/template.pug
@@ -14,7 +14,19 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-.container--responsive.wcf-content
-    ignite-footer
-    web-console-footer-links(ng-if='$parent.user')
-    ignite-powered-by-apache
\ No newline at end of file
+
+.web-console-footer__sidebar-stuff
+    a(
+        href="/api/v1/downloads/agent"
+        target="_self"
+        ng-if='$ctrl.userIsAuthorized'
+        title='Download Agent'
+    )
+        svg(ignite-icon='downloadAgent')
+
+.web-console-footer__regular-stuff
+    p Apache Ignite Web Console ({{$ctrl.Version.webConsole}})
+    p © {{::$ctrl.year}} The Apache Software Foundation.
+    p.web-console-footer__legal Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are trademarks of The Apache Software Foundation.
+
+    a(href="/api/v1/downloads/agent" target="_self" ng-if='$ctrl.userIsAuthorized') Download Agent
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/component.js b/modules/web-console/frontend/app/components/web-console-header/component.js
deleted file mode 100644
index 02b3080..0000000
--- a/modules/web-console/frontend/app/components/web-console-header/component.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './template.pug';
-import './style.scss';
-
-export default {
-    template,
-    controller: class {
-        static $inject = ['$rootScope', '$scope', '$state', 'IgniteBranding', 'UserNotifications'];
-
-        static connectedClustersUnvisibleStates = [
-            '403', '404', 'signin'
-        ];
-
-        constructor($rootScope, $scope, $state, branding, UserNotifications) {
-            Object.assign(this, {$rootScope, $scope, $state, branding, UserNotifications});
-        }
-
-        setConnectedClustersVisible() {
-            this.isConnectedClustersVisible =
-                !this.constructor.connectedClustersUnvisibleStates.some((state) => this.$state.includes(state));
-        }
-
-        isAuthorized() {
-            return !!this.$rootScope.user;
-        }
-
-        $onInit() {
-            this.setConnectedClustersVisible();
-
-            this.$scope.$on('$stateChangeSuccess', () => this.setConnectedClustersVisible());
-        }
-    },
-    transclude: {
-        slotLeft: '?webConsoleHeaderLeft',
-        slotRight: '?webConsoleHeaderRight'
-    }
-};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/component.ts b/modules/web-console/frontend/app/components/web-console-header/component.ts
new file mode 100644
index 0000000..ad7e8a7
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/component.ts
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import './style.scss';
+import {AppStore, toggleSidebar} from '../../store';
+
+export default {
+    template,
+    controller: class {
+        static $inject = ['$rootScope', '$scope', '$state', 'IgniteBranding', 'UserNotifications', 'Store'];
+
+        constructor($rootScope, $scope, $state, branding, UserNotifications, private store: AppStore) {
+            Object.assign(this, {$rootScope, $scope, $state, branding, UserNotifications});
+        }
+
+        toggleSidebar() {
+            this.store.dispatch(toggleSidebar());
+        }
+
+        isAuthorized() {
+            return !!this.$rootScope.user;
+        }
+    },
+    transclude: true,
+    bindings: {
+        hideMenuButton: '<?'
+    }
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/component.ts b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/component.ts
new file mode 100644
index 0000000..e24b551
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/component.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import controller from './controller';
+
+export const component: ng.IComponentOptions = {
+    template,
+    controller
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts
new file mode 100644
index 0000000..1a1bd1e
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/controller.ts
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {StateService} from '@uirouter/angularjs';
+import {default as LegacyConfirmFactory} from 'app/services/Confirm.service';
+
+export default class DemoModeButton {
+    static $inject = ['$rootScope', '$state', '$window', 'IgniteConfirm'];
+    constructor(
+        private $root: ng.IRootScopeService,
+        private $state: StateService,
+        private $window: ng.IWindowService,
+        private Confirm: ReturnType<typeof LegacyConfirmFactory>
+    ) {}
+
+    private _openTab(stateName: string) {
+        this.$window.open(this.$state.href(stateName, {}), '_blank');
+    }
+
+    startDemo() {
+        if (!this.$root.user.demoCreated)
+            return this._openTab('demo.reset');
+
+        this.Confirm.confirm('Would you like to continue with previous demo session?', true, false)
+            .then((resume) => {
+                if (resume)
+                    return this._openTab('demo.resume');
+
+                this._openTab('demo.reset');
+            });
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/template.pug b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/template.pug
new file mode 100644
index 0000000..f566ac4
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/demo-mode-button/template.pug
@@ -0,0 +1,20 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+
+button.btn-ignite.btn-ignite--success(
+    ng-click='$ctrl.startDemo()'
+) Start Demo
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/user-menu/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/user-menu/component.ts b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/component.ts
new file mode 100644
index 0000000..f6141d9
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/component.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import controller from './controller';
+import './style.scss';
+
+export default {
+    template,
+    controller
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/user-menu/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/user-menu/controller.ts b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/controller.ts
new file mode 100644
index 0000000..812d3b5
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/controller.ts
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default class UserMenu {
+    static $inject = ['$rootScope', 'IgniteUserbar', 'AclService', '$state', 'gettingStarted']
+    constructor(
+        private $root: ng.IRootScopeService,
+        private IgniteUserbar: any,
+        private AclService: any,
+        private $state: any,
+        private gettingStarted: any
+    ) {}
+    $onInit() {
+        this.items = [
+            {text: 'Profile', sref: 'base.settings.profile'},
+            {text: 'Getting started', click: '$ctrl.gettingStarted.tryShow(true)'}
+        ];
+
+        const _rebuildSettings = () => {
+            this.items.splice(2);
+
+            if (this.AclService.can('admin_page'))
+                this.items.push({text: 'Admin panel', sref: 'base.settings.admin'});
+
+            this.items.push(...this.IgniteUserbar);
+
+            if (this.AclService.can('logout'))
+                this.items.push({text: 'Log out', sref: 'logout'});
+        };
+
+        if (this.$root.user)
+            _rebuildSettings(null, this.$root.user);
+
+        this.$root.$on('user', _rebuildSettings);
+    }
+    get user() {
+        return this.$root.user;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/user-menu/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/user-menu/style.scss b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/style.scss
new file mode 100644
index 0000000..898047b
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/style.scss
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+user-menu {
+    --active-link-color: #ee2b27;
+    font-size: 14px;
+
+    &>.active {
+        color: var(--active-link-color)
+    }
+    .caret {
+        margin-left: 8px;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/user-menu/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/user-menu/template.pug b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/template.pug
new file mode 100644
index 0000000..e946c78
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/user-menu/template.pug
@@ -0,0 +1,26 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+div(
+    ng-class='{active: $ctrl.$state.includes("base.settings")}'
+    ng-click='$event.stopPropagation()'
+    bs-dropdown='$ctrl.items'
+    data-placement='bottom-right'
+    data-trigger='hover focus'
+    data-container='self'
+)
+    span {{$ctrl.user.firstName}} {{$ctrl.user.lastName}}
+    span.caret
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/component.ts b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/component.ts
new file mode 100644
index 0000000..e86d3e5
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/component.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import controller from './controller';
+import './style.scss';
+
+export const component: ng.IComponentOptions = {
+    template,
+    controller
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/controller.ts b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/controller.ts
new file mode 100644
index 0000000..4345553
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/controller.ts
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {StateService} from '@uirouter/angularjs';
+
+export default class WebConsoleHeaderContent {
+    static $inject = ['$rootScope', '$state']
+    constructor(
+        private $rootScope: ng.IRootScopeService,
+        private $state: StateService
+    ) {}
+
+    static connectedClusterInvisibleStates = [
+        '403', '404', 'signin'
+    ];
+
+    get showConnectedClusters(): boolean {
+        return this.$rootScope.user &&
+            !this.$rootScope.IgniteDemoMode &&
+            !this.constructor.connectedClusterInvisibleStates.some((state) => this.$state.includes(state)) &&
+            !this.$rootScope.user.becomeUsed;
+    }
+
+    get showUserMenu(): boolean {
+        return !!this.$rootScope.user;
+    }
+
+    get showDemoModeButton(): boolean {
+        return this.$rootScope.user && !this.$rootScope.user.becomeUsed && !this.$rootScope.IgniteDemoMode;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/style.scss b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/style.scss
new file mode 100644
index 0000000..f483614
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/style.scss
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+web-console-header-content {
+    display: flex;
+    flex: 1;
+
+    .web-console-header-content__right {
+        margin-left: auto;
+        display: flex;
+    }
+
+    .web-console-header-item {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-content: center;
+        padding: 0 20px;
+        border-left: 1px solid #dddddd;
+        height: 100%;
+    }
+}
+
+.web-console-header-content__title {
+    display: flex;
+    align-items: center;
+    margin-left: 80px;
+    font-size: 1.4em;
+    margin-right: auto;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/template.pug b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/template.pug
new file mode 100644
index 0000000..8f1d4f8
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-content/template.pug
@@ -0,0 +1,24 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+.web-console-header-content__right
+    .web-console-header-item(ng-if='$ctrl.showConnectedClusters')
+        connected-clusters
+    .web-console-header-item(ng-if='$ctrl.showDemoModeButton')
+        demo-mode-button
+
+.web-console-header-item(ng-if='$ctrl.showUserMenu')
+    user-menu
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/component.js b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/component.js
deleted file mode 100644
index 1621adc..0000000
--- a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/component.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './template.pug';
-
-export default {
-    template
-};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/template.pug b/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/template.pug
deleted file mode 100644
index 0545db1..0000000
--- a/modules/web-console/frontend/app/components/web-console-header/components/web-console-header-extension/template.pug
+++ /dev/null
@@ -1,15 +0,0 @@
-//-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/index.js b/modules/web-console/frontend/app/components/web-console-header/index.js
index 3fc5c66..2a106d4 100644
--- a/modules/web-console/frontend/app/components/web-console-header/index.js
+++ b/modules/web-console/frontend/app/components/web-console-header/index.js
@@ -17,9 +17,13 @@
 
 import angular from 'angular';
 import component from './component';
-import componentExtension from './components/web-console-header-extension/component';
+import userMenu from './components/user-menu/component';
+import {component as content} from './components/web-console-header-content/component';
+import {component as demo} from './components/demo-mode-button/component';
 
 export default angular
     .module('ignite-console.web-console-header', [])
     .component('webConsoleHeader', component)
-    .component('webConsoleHeaderExtension', componentExtension);
+    .component('webConsoleHeaderContent', content)
+    .component('userMenu', userMenu)
+    .component('demoModeButton', demo);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/style.scss b/modules/web-console/frontend/app/components/web-console-header/style.scss
index 4edf6fd..e343284 100644
--- a/modules/web-console/frontend/app/components/web-console-header/style.scss
+++ b/modules/web-console/frontend/app/components/web-console-header/style.scss
@@ -21,13 +21,24 @@ web-console-header {
     $nav-item-margin: 30px;
     $bottom-border-width: 4px;
 
-    display: block;
-    min-height: 85px;
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    height: 62px;
     font-family: Roboto;
     font-size: 16px;
     border-bottom: $bottom-border-width solid red;
     background: white;
     position: relative;
+    padding-left: 16px;
+
+    &>ng-transclude {
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-end;
+        height: 100%;
+        flex: 1;
+    }
 
     &:after {
         // Shows header shadow over absolutely positioned child content,
@@ -39,6 +50,7 @@ web-console-header {
         position: absolute;
         overflow: hidden;
         bottom: -4px;
+        pointer-events: none;
     }
 
     .wch-slot {
@@ -59,154 +71,26 @@ web-console-header {
         }
     }
 
-    .wch-content {
-        display: flex;
-        flex-direction: row;
-        flex-wrap: wrap;
-        align-items: center;
-        padding: 18px 30px;
-        position: relative;
-        height: 81px;
-    }
-
     .wch-logo {
         height: 40px;
     }
 
-    .wch-nav-item,
-    .wch-nav-item > a {
-        cursor: pointer;
-        white-space: nowrap;
-
-        &, &.active {
-            font-size: 16px;
-            font-weight: normal;
-            text-decoration: none;
-        }
-
-        $color-default: $text-color;
-        $color-hover: $brand-primary;
-        $color-active: $brand-primary;
-
-        &, a {
-            color: $color-default;
-            text-decoration: none;
-        }
-
-        &, ul {
-            margin: 0;
-            list-style: none;
-            -webkit-padding-start: 0;
-        }
-
-        &:hover {
-            color: $color-hover;
-        }
-
-        &:focus, :focus,
-        &.active, .active {
-            color: $color-active;
-            text-decoration: none;
-        }
-
-        &[disabled] {
-            opacity: 0.5;
-            cursor: default;
-        }
-
-        .caret {
-            margin-left: 4px;
-        }
-
-        &:not(:last-child) {
-            margin-right: $nav-item-margin;
-        }
-
-        .dropdown-menu {
-            a {
-                &:hover, &:focus {
-                    color: inherit;
-                }
-            }
-            li.active a {
-                color: inherit;
-            }
-        }
-
-        .user-name-wrapper {
-            display: flex;
-            align-items: center;
-
-           & > span {
-               max-width: 180px;
-               overflow: hidden;
-               text-overflow: ellipsis;
-           }
-        }
-    }
-
-    .wch-demo-toggle {
-        margin-right: 10px;
-
-        // When in demo mode and clusters are hidden
-        &:nth-last-child(2) {
-            margin-right: $nav-item-margin;
-        }
-    }
-
-    .wch-notification {
-        line-height: 16px;
-        padding: 7px;
-        background: $brand-warning;
-        font-size: 16px;
-        text-align: center;
-
-        a {
-            color: $brand-info;
-        }
-
-        &+.wch-notification {
-            border-top: 1px solid darken($brand-warning, 15%);
-        }
-    }
-
-    .wch-notification.wch-notification--demo {
-        z-index: 10000000;
-        position: fixed;
-        top: 0;
-        width: 100%;
-
-        color: white;
-        background: $ignite-brand-success;
-        border: none;
-
-        box-shadow: 0 0 15px #008eff;
-        animation: pulse 2s infinite;
-
-        a {
-            color: white;
-            text-decoration: underline;
-
-            &:hover {
-                color: #ffab40;
-                text-decoration: none;
-            }
-        }
-    }
-
     .wch-additional-nav-items {
         display: flex;
     }
-}
 
-@keyframes pulse {
-    0% {
-        box-shadow: 0 1px 2px #008eff;
-    }
-    50% {
-        box-shadow: 0 1px 15px #008eff;
+    .web-console-header__togle-menu-button {
+        width: 40px;
+        height: 40px;
+        background: none !important;
+        border: none !important;
+        margin: 0 !important;
+        padding: 0 !important;
+        outline: none !important;
+        color: rgba(0, 0, 0, 0.54);
+        margin-right: 5px;
     }
-    100% {
-        box-shadow: 0 1px 2px #008eff;
+    .web-console-header__togle-menu-button-hidden {
+        visibility: hidden;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-header/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-header/template.pug b/modules/web-console/frontend/app/components/web-console-header/template.pug
index 1d25b13..940f3a4 100644
--- a/modules/web-console/frontend/app/components/web-console-header/template.pug
+++ b/modules/web-console/frontend/app/components/web-console-header/template.pug
@@ -14,23 +14,15 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-.wch-notification(ng-show='$ctrl.UserNotifications.isShown && $ctrl.UserNotifications.message' ng-bind-html='$ctrl.UserNotifications.message')
-
-.wch-notification(ng-show='$root.user.becomeUsed')
-    | You are currently viewing user #[strong {{$root.user.firstName}} {{$root.user.lastName}}] as administrator. #[a(ng-click='$root.revertIdentity()') Revert to your identity?]
-
-.wch-notification.wch-notification--demo(ng-if='$root.IgniteDemoMode')
-    div(ng-controller='demoController')
-        | You are now in #[b Demo Mode]. #[a(ng-click='closeDemo();') Close Demo?]
-
-.wch-content
-    connected-clusters(ng-if='$ctrl.$rootScope.user && !$ctrl.$rootScope.IgniteDemoMode && $ctrl.isConnectedClustersVisible && !$root.user.becomeUsed')
-
-    a(ui-sref='default-state' ng-if='$ctrl.isAuthorized()').wch-logo-anchor
-        img.wch-logo(ng-src='{{::$ctrl.branding.headerLogo}}')
-
-    a(ui-sref='landing' ng-if='!$ctrl.isAuthorized()').wch-logo-anchor
-        img.wch-logo(ng-src='{{::$ctrl.branding.headerLogo}}')
-
-    .wch-slot.wch-slot-left(ng-transclude='slotLeft')
-    .wch-slot.wch-slot-right(ng-transclude='slotRight')
+button.web-console-header__togle-menu-button(
+    type='button'
+    title='Toggle menu'
+    ng-click='$ctrl.toggleSidebar()'
+    ng-class='::{"web-console-header__togle-menu-button-hidden": $ctrl.hideMenuButton}'
+)
+    svg(ignite-icon='menu')
+
+a(ui-sref='{{$ctrl.isAuthorized() ? "default-state" : "landing"}}').wch-logo-anchor
+    img.wch-logo(src='/images/ignite-logo.svg')
+
+ng-transclude

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/component.ts b/modules/web-console/frontend/app/components/web-console-sidebar/component.ts
new file mode 100644
index 0000000..e86d3e5
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/component.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import controller from './controller';
+import './style.scss';
+
+export const component: ng.IComponentOptions = {
+    template,
+    controller
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/controller.ts b/modules/web-console/frontend/app/components/web-console-sidebar/controller.ts
new file mode 100644
index 0000000..bdf606b
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/controller.ts
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {AppStore, selectSidebarOpened} from '../../store';
+
+export default class WebConsoleSidebar {
+    static $inject = ['$rootScope', 'Store']
+    constructor(
+        private $rootScope: ng.IRootScopeService,
+        private store: AppStore
+    ) {}
+    sidebarOpened$ = this.store.state$.pipe(selectSidebarOpened())
+    get showNavigation(): boolean {
+        return !!this.$rootScope.user;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/index.ts b/modules/web-console/frontend/app/components/web-console-sidebar/index.ts
new file mode 100644
index 0000000..717dca5
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/index.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {component as overflow} from './web-console-sidebar-overflow/component';
+import {component as nav} from './web-console-sidebar-navigation/component';
+import {component as sidebar} from './component';
+
+export default angular.module('sidebar', [])
+    .component('webConsoleSidebarOverflow', overflow)
+    .component('webConsoleSidebarNavigation', nav)
+    .component('webConsoleSidebar', sidebar);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/style.scss b/modules/web-console/frontend/app/components/web-console-sidebar/style.scss
new file mode 100644
index 0000000..b625333
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/style.scss
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+web-console-sidebar {
+    display: flex;
+    flex-direction: column;
+    background: white;
+    border-right: 1px #dddddd solid;
+    --width-narrow: 75px;
+    --width-wide: 280px;
+    --active-link-color: #ee2b27;
+    --inactive-link-color: #757575;
+    // Does not include notifications height
+    max-height: calc(100vh - var(--header-height));
+    position: -webkit-sticky;
+    position: sticky;
+    top: var(--header-height);
+
+    web-console-sidebar-overflow {
+        flex: 1;
+    }
+
+    web-console-footer {
+        flex: 0 0 auto;
+
+        &:first-child {
+            margin-top: auto;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/template.pug b/modules/web-console/frontend/app/components/web-console-sidebar/template.pug
new file mode 100644
index 0000000..f02f2c4
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/template.pug
@@ -0,0 +1,22 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+web-console-sidebar-overflow
+    web-console-sidebar-navigation(opened='$ctrl.sidebarOpened$|async:this' ng-if='$ctrl.showNavigation')
+web-console-footer(ng-class=`{
+    "web-console-footer__sidebar-opened": ($ctrl.sidebarOpened$|async:this),
+    "web-console-footer__sidebar-closed": !($ctrl.sidebarOpened$|async:this)
+}`)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/component.ts b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/component.ts
new file mode 100644
index 0000000..4e4647f
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/component.ts
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import './style.scss';
+import template from './template.pug';
+import controller from './controller';
+
+export const component = {
+    controller,
+    template,
+    bindings: {
+        opened: '<'
+    }
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/controller.ts b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/controller.ts
new file mode 100644
index 0000000..8b5355a
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/controller.ts
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {AppStore, selectNavigationMenu} from '../../../store';
+
+export default class WebConsoleSidebarNavigation {
+    static $inject = ['Store']
+    constructor(private store: AppStore) {}
+    menu$ = this.store.state$.pipe(selectNavigationMenu())
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
new file mode 100644
index 0000000..83c21a3
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+web-console-sidebar-navigation {
+    display: flex;
+    flex-direction: column;
+    padding-top: 14px;
+
+    nav {
+        display: flex;
+        flex-direction: column;
+        list-style-type: none;
+
+        &>li {
+            display: flex;
+        }
+    }
+
+    .web-console-sidebar-navigation__link-icon {
+        width: 20px;
+        height: auto;
+        color: var(--inactive-link-color);
+    }
+
+    .web-console-sidebar-navigation__link-narrow {
+        height: var(--width-narrow);
+        width: var(--width-narrow);
+        color: var(--inactive-link-color);
+        display: flex;
+        justify-content: center;
+        align-items: center;
+
+        &:hover, &:focus {
+            color: var(--active-link-color);
+
+        }
+
+        &.web-console-sidebar-navigation__link-active {
+            color: var(--active-link-color);
+            position: relative;
+
+            &:after {
+                content: '';
+                display: block;
+                width: 2px;
+                // Line can't be outside of scrollable container
+                right: 0;
+                top: 0;
+                bottom: 0;
+                position: absolute;
+                background: var(--active-link-color);
+            }
+            .web-console-sidebar-navigation__link-icon {
+                color: inherit;
+            }
+        }
+        .web-console-sidebar-navigation__link-content {
+            display: none;
+        }
+    }
+    .web-console-sidebar-navigation__link-wide {
+        color: #393939;
+        text-decoration: none !important;
+        line-height: 19px;
+        font-size: 16px;
+        padding: 10px 28px 11px;
+        width: var(--width-wide);
+        display: inline-flex;
+        align-items: center;
+
+        &:first-of-type {
+            margin-top: 18px;
+        }
+
+        &:hover, &:focus {
+            color: var(--active-link-color);
+
+            .web-console-sidebar-navigation__link-icon {
+                color: inherit;
+            }
+        }
+        &.web-console-sidebar-navigation__link-active {
+            color: white;
+            background: var(--active-link-color);
+
+            .web-console-sidebar-navigation__link-icon {
+                color: inherit;
+            }
+        }
+        .web-console-sidebar-navigation__link-icon {
+            margin-right: 12px;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/template.pug b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/template.pug
new file mode 100644
index 0000000..c35de9d
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/template.pug
@@ -0,0 +1,35 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+nav
+    li(
+        ng-repeat='item in $ctrl.menu$|async:this track by item.sref'
+        ng-if='!item.hidden'
+    )
+        a.web-console-sidebar-navigation__link(
+            ui-sref='{{item.sref}}'
+            ui-sref-active=`{
+                "web-console-sidebar-navigation__link-active": item.activeSref
+            }`
+            title='{{item.label|translate}}'
+            ng-class=`{
+                'web-console-sidebar-navigation__link-narrow': !$ctrl.opened,
+                'web-console-sidebar-navigation__link-wide': $ctrl.opened
+            }`
+            tabindex='0'
+        )
+            svg.web-console-sidebar-navigation__link-icon(ignite-icon='{{item.icon}}')
+            span.web-console-sidebar-navigation__link-content(translate='{{item.label}}')

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/component.ts b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/component.ts
new file mode 100644
index 0000000..0f69e2d
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/component.ts
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import controller from './controller';
+import template from './template.pug';
+import './style.scss';
+
+export const component: ng.IComponentOptions =  {
+    controller,
+    transclude: true,
+    template
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/controller.ts b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/controller.ts
new file mode 100644
index 0000000..d5403f4
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/controller.ts
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import ResizeObserver from 'resize-observer-polyfill';
+
+export default class WebCOnsoleSidebarOverflow {
+    static $inject = ['$element', 'gridUtil', '$window']
+    constructor(private el: JQLite, private gridUtil: {getScrollbarWidth(): number}, private $win: ng.IWindowService) {}
+    scrollEl!: JQLite
+    resizeObserver: ResizeObserver
+    $onInit() {
+        this.el.css('--scrollbar-width', this.gridUtil.getScrollbarWidth());
+    }
+    $postLink() {
+        this.scrollEl[0].addEventListener('scroll', this.onScroll, {passive: true});
+        this.resizeObserver = new ResizeObserver(() => this.applyStyles(this.scrollEl[0]));
+        this.resizeObserver.observe(this.el[0]);
+    }
+    $onDestroy() {
+        this.scrollEl[0].removeEventListener('scroll', this.onScroll);
+        this.resizeObserver.disconnect();
+    }
+    applyStyles(target: HTMLElement) {
+        const {offsetHeight, scrollTop, scrollHeight} = target;
+        const top = scrollTop !== 0;
+        const bottom = Math.floor((offsetHeight + scrollTop)) !== Math.floor(scrollHeight);
+
+        target.classList.toggle('top', top);
+        target.classList.toggle('bottom', bottom);
+    }
+    onScroll = (e: UIEvent) => {
+        this.$win.requestAnimationFrame(() => {
+            this.applyStyles(e.target as HTMLElement);
+        });
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/style.scss b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/style.scss
new file mode 100644
index 0000000..cbc6adc
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/style.scss
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+web-console-sidebar-overflow {
+    overflow: hidden;
+    position: relative;
+    display: flex;
+
+    &>.web-console-sidebar-overflow__scroll-root {
+        overflow-x: hidden;
+        overflow-y: scroll;
+        margin-right: calc(-1 * var(--scrollbar-width));
+
+        &.top:before {
+            display: block;
+            width: 100%;
+            content: '';
+            height: 1px;
+            position: absolute;
+            top: -1px;
+            box-shadow: 0 0 9px 1px #a0a0a0;
+            transform: translateZ(1px);
+        }
+        &.bottom:after {
+            display: block;
+            width: 100%;
+            content: '';
+            position: absolute;
+            bottom: 0;
+            box-shadow: 0 0 9px 1px #a0a0a0;
+            transform: translateZ(1px);
+        }
+
+        &>ng-transclude {
+            display: block;
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/template.pug b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/template.pug
new file mode 100644
index 0000000..5b70da6
--- /dev/null
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-overflow/template.pug
@@ -0,0 +1,18 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+.web-console-sidebar-overflow__scroll-root(ng-ref='$ctrl.scrollEl' ng-ref-read='$element')
+    ng-transclude(ng-style='::{"--scrollbar-width": $ctrl.SCROLLBAR_WIDTH}')
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/branding.module.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/branding.module.js b/modules/web-console/frontend/app/modules/branding/branding.module.js
index 20cd93e..8b23d04 100644
--- a/modules/web-console/frontend/app/modules/branding/branding.module.js
+++ b/modules/web-console/frontend/app/modules/branding/branding.module.js
@@ -19,12 +19,8 @@ import angular from 'angular';
 
 import IgniteBranding from './branding.service';
 
-import igniteHeaderLogo from './header-logo.directive';
-import igniteHeaderTitle from './header-title.directive';
 import igniteTerms from './terms.directive';
 import igniteFeatures from './features.directive';
-import igniteFooter from './footer.directive';
-import ignitePoweredByApache from './powered-by-apache.directive';
 
 angular
 .module('ignite-console.branding', [
@@ -41,9 +37,5 @@ angular
 
     tfMetaTagsProvider.setTitleSuffix(' – Apache Ignite Web Console');
 }])
-.directive('ignitePoweredByApache', ignitePoweredByApache)
-.directive('igniteHeaderLogo', igniteHeaderLogo)
-.directive('igniteHeaderTitle', igniteHeaderTitle)
 .directive('igniteTerms', igniteTerms)
-.directive('igniteFeatures', igniteFeatures)
-.directive('igniteFooter', igniteFooter);
+.directive('igniteFeatures', igniteFeatures);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/branding.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/branding.service.js b/modules/web-console/frontend/app/modules/branding/branding.service.js
index 667dbfd..f184a4d 100644
--- a/modules/web-console/frontend/app/modules/branding/branding.service.js
+++ b/modules/web-console/frontend/app/modules/branding/branding.service.js
@@ -24,10 +24,6 @@ export default class {
     constructor(Version) {
         this.titleSuffix = ' - Apache Ignite Web Console';
 
-        this.headerLogo = '/images/ignite-logo.svg';
-
-        this.headerText = 'Management console for Apache Ignite';
-
         this.showIgniteLogo = false;
 
         this.footerHtml = [

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/footer.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/footer.directive.js b/modules/web-console/frontend/app/modules/branding/footer.directive.js
deleted file mode 100644
index 3c0bb83..0000000
--- a/modules/web-console/frontend/app/modules/branding/footer.directive.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-const template = '<div class="footer" ng-bind-html="footer.html"></div>';
-
-/**
- * @param {import('./branding.service').default} branding
- */
-export default function factory(branding) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.html = branding.footerHtml;
-    }
-
-    return {
-        restrict: 'E',
-        template,
-        controller,
-        controllerAs: 'footer',
-        replace: true
-    };
-}
-
-factory.$inject = ['IgniteBranding'];

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/modules/branding/header-logo.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/branding/header-logo.directive.js b/modules/web-console/frontend/app/modules/branding/header-logo.directive.js
deleted file mode 100644
index 60e5d5d..0000000
--- a/modules/web-console/frontend/app/modules/branding/header-logo.directive.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import template from './header-logo.pug';
-
-/**
- * @param {import('./branding.service').default} branding
- */
-export default function factory(branding) {
-    function controller() {
-        const ctrl = this;
-
-        ctrl.url = branding.headerLogo;
-    }
-
-    return {
-        restrict: 'E',
-        template,
-        controller,
-        controllerAs: 'logo',
-        replace: true
-    };
-}
-
-factory.$inject = ['IgniteBranding'];


[40/52] [abbrv] ignite git commit: IGNITE-10572: MVCC TX: Possible race on invokeAll operations. This closes #5608.

Posted by sb...@apache.org.
IGNITE-10572: MVCC TX: Possible race on invokeAll operations. This closes #5608.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9dc6d086
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9dc6d086
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9dc6d086

Branch: refs/heads/ignite-627
Commit: 9dc6d0864fb007fcab97eccee964d1df75fbd75c
Parents: ca8a80b
Author: Andrey V. Mashenkov <an...@gmail.com>
Authored: Wed Dec 19 14:44:16 2018 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Wed Dec 19 14:44:16 2018 +0300

----------------------------------------------------------------------
 .../near/GridNearTxEnlistFuture.java            | 20 +++++++++++---------
 .../near/GridNearTxEnlistResponse.java          |  2 +-
 .../cache/distributed/near/GridNearTxLocal.java |  2 +-
 3 files changed, 13 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc6d086/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
index 35a8cfa..789cd3c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistFuture.java
@@ -26,6 +26,7 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
+import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.internal.IgniteInternalFuture;
@@ -69,6 +70,10 @@ public class GridNearTxEnlistFuture extends GridNearTxAbstractEnlistFuture<GridC
     private static final AtomicIntegerFieldUpdater<GridNearTxEnlistFuture> SKIP_UPD =
         AtomicIntegerFieldUpdater.newUpdater(GridNearTxEnlistFuture.class, "skipCntr");
 
+    /** Res field updater. */
+    private static final AtomicReferenceFieldUpdater<GridNearTxEnlistFuture, GridCacheReturn> RES_UPD =
+        AtomicReferenceFieldUpdater.newUpdater(GridNearTxEnlistFuture.class, GridCacheReturn.class, "res");
+
     /** Marker object. */
     private static final Object FINISHED = new Object();
 
@@ -598,20 +603,17 @@ public class GridNearTxEnlistFuture extends GridNearTxAbstractEnlistFuture<GridC
 
         assert res != null;
 
-        if (res.result().invokeResult()) {
-            if(this.res == null)
-                this.res = new GridCacheReturn(true, true);
-
-            this.res.success(this.res.success() && err == null && res.result().success());
+        if (this.res != null || !RES_UPD.compareAndSet(this, null, res.result())) {
+            GridCacheReturn res0 = this.res;
 
-            this.res.mergeEntryProcessResults(res.result());
+            if (res.result().invokeResult())
+                res0.mergeEntryProcessResults(res.result());
+            else if (res0.success() && !res.result().success())
+                res0.success(false);
         }
-        else
-            this.res = res.result();
 
         assert this.res != null && (this.res.emptyResult() || needRes || this.res.invokeResult() || !this.res.success());
 
-
         tx.hasRemoteLocks(true);
 
         return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc6d086/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistResponse.java
index cf00186..93df0c2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistResponse.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxEnlistResponse.java
@@ -158,7 +158,7 @@ public class GridNearTxEnlistResponse extends GridCacheIdMessage implements Exce
     }
 
     /** {@inheritDoc} */
-    @Nullable @Override public Throwable error() {
+    @Override public @Nullable Throwable error() {
         return err;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc6d086/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
index fb2f8e3..7d50947 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxLocal.java
@@ -2089,7 +2089,7 @@ public class GridNearTxLocal extends GridDhtTxLocalAdapter implements GridTimeou
 
                     Object val = futRes.value();
 
-                    if (futRes.invokeResult()) {
+                    if (futRes.invokeResult() && val != null) {
                         assert val instanceof Map;
 
                         val = cacheCtx.unwrapInvokeResult((Map)val, keepBinary);


[23/52] [abbrv] ignite git commit: IGNITE-10289: [ML] Import models from XGBoost

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-expected-results.txt
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-expected-results.txt b/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-expected-results.txt
new file mode 100644
index 0000000..b6947fd
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-expected-results.txt
@@ -0,0 +1,1611 @@
+0.00025412877
+0.99888784
+0.00025412877
+0.00020371929
+0.0016852723
+0.004336959
+0.99888605
+0.00025412877
+0.99888784
+0.0007407177
+0.99888784
+0.00048179296
+6.019019e-06
+0.00025412877
+7.060129e-06
+0.0003617697
+0.00047204422
+0.99879885
+0.0012118616
+0.00040873847
+0.00047204422
+0.0003617697
+0.00025412877
+0.0004505964
+0.00031991434
+0.9996768
+0.004901804
+0.00052038184
+0.0004505964
+6.019019e-06
+0.00020371929
+0.00052038184
+0.00065504765
+0.0011316377
+0.0002305175
+0.00047204422
+0.004901804
+0.9993381
+0.0002305175
+0.00047204422
+0.0011316377
+0.00020371929
+0.00019959644
+0.0002305175
+0.0002305175
+0.0021919373
+0.0008000284
+0.0051317057
+0.0012118616
+0.00052038184
+0.0003617697
+0.00019959644
+0.99951875
+0.00040873847
+0.00022004127
+0.00039074913
+0.00020371929
+0.00019959644
+0.00040873847
+0.00052038184
+0.0014905198
+7.905719e-06
+0.9994962
+7.905719e-06
+0.99888784
+0.0004505964
+0.9994567
+0.00052038184
+0.00019959644
+0.0004370383
+0.00065504765
+0.0023671745
+0.00019959644
+7.060129e-06
+0.0011316377
+0.00025412877
+0.00065504765
+5.322418e-06
+0.00037842535
+6.243038e-06
+0.0008000284
+0.0013067605
+0.00040873847
+0.0017210845
+0.00025412877
+0.00022004127
+0.9993862
+0.99888784
+0.00019959644
+0.0003455418
+0.0007407177
+0.0002305175
+0.00022004127
+0.0007075034
+0.00019959644
+0.0002305175
+0.0004370383
+0.0004505964
+0.0016852723
+0.0011316377
+0.0002352789
+0.0057994546
+0.0008000284
+0.0031079606
+0.00065504765
+0.00039074913
+0.00018479073
+0.00040873847
+0.0004370383
+0.0023447894
+0.0010494431
+0.0003617697
+0.00052038184
+0.00022004127
+7.060129e-06
+0.9989686
+0.00025412877
+0.0027754887
+0.0012795585
+0.0025701027
+0.00037842535
+0.00040873847
+0.00031991434
+0.0004505964
+0.0015961447
+0.0015961447
+0.00037842535
+5.322418e-06
+0.00025412877
+0.0007407177
+0.00040873847
+0.0002305175
+0.00039074913
+0.0011866327
+0.0016852723
+0.0011866327
+0.00047204422
+0.00022004127
+0.0015629282
+0.99941325
+0.00052038184
+0.00052038184
+7.6220385e-06
+0.00018479073
+0.0007075034
+0.00040873847
+5.322418e-06
+0.00018479073
+0.9993862
+0.00039074913
+0.0057447995
+0.0007075034
+0.0043782797
+0.00047204422
+0.0002305175
+0.004336959
+0.0003455418
+0.0017210845
+0.00048179296
+0.00037842535
+0.99965084
+0.9989686
+0.00019959644
+0.00031991434
+0.00020371929
+0.0043782797
+0.9994567
+0.00040873847
+0.00041718033
+0.002676164
+0.0028780429
+0.0003455418
+0.005320857
+0.99879885
+0.0008000284
+0.0057994546
+0.9996768
+0.0004505964
+0.0011866327
+0.00019959644
+0.00020587152
+0.0004505964
+0.005083311
+3.2162723e-05
+0.0003455418
+0.00040873847
+6.7399155e-06
+0.00047204422
+0.999337
+5.322418e-06
+8.940421e-06
+0.99893767
+0.99888605
+7.6220385e-06
+0.99965084
+0.0031376088
+7.060129e-06
+7.905719e-06
+6.243038e-06
+0.00022004127
+4.237742e-05
+0.99965084
+6.7399155e-06
+5.322418e-06
+7.060129e-06
+8.940421e-06
+0.00052038184
+0.0053715007
+0.00019060042
+0.00031991434
+0.00041718033
+6.7399155e-06
+4.237742e-05
+0.0007075034
+0.00047204422
+6.019019e-06
+0.00041718033
+0.0017210845
+7.905719e-06
+0.9989686
+6.019019e-06
+0.9994567
+7.060129e-06
+7.6220385e-06
+8.940421e-06
+7.060129e-06
+5.322418e-06
+0.9994147
+0.0004505964
+8.940421e-06
+7.905719e-06
+8.940421e-06
+0.00015625419
+0.0014905198
+5.322418e-06
+0.0007075034
+7.6220385e-06
+5.322418e-06
+0.9997003
+0.00020371929
+7.060129e-06
+5.322418e-06
+8.940421e-06
+8.940421e-06
+6.243038e-06
+4.325291e-05
+0.99901485
+8.940421e-06
+0.9994137
+7.6220385e-06
+3.5457782e-05
+0.00015625419
+3.5457782e-05
+6.7399155e-06
+5.322418e-06
+8.940421e-06
+4.237742e-05
+7.060129e-06
+0.00020587152
+0.9997141
+0.00015625419
+4.237742e-05
+0.00047204422
+0.9993862
+8.940421e-06
+0.9997141
+3.2162723e-05
+6.243038e-06
+8.940421e-06
+7.6220385e-06
+6.019019e-06
+7.6220385e-06
+6.243038e-06
+0.9997141
+7.060129e-06
+5.322418e-06
+3.923348e-05
+7.905719e-06
+5.322418e-06
+7.905719e-06
+0.9990878
+0.00039074913
+5.322418e-06
+6.243038e-06
+0.00052038184
+7.6220385e-06
+8.940421e-06
+7.905719e-06
+7.060129e-06
+6.243038e-06
+8.940421e-06
+6.019019e-06
+0.99955446
+7.6220385e-06
+6.243038e-06
+0.9994567
+6.243038e-06
+5.322418e-06
+0.9994572
+7.060129e-06
+7.060129e-06
+5.322418e-06
+0.99955446
+6.243038e-06
+7.905719e-06
+7.060129e-06
+7.060129e-06
+0.99955446
+0.00020587152
+6.7399155e-06
+7.6220385e-06
+7.905719e-06
+8.940421e-06
+7.060129e-06
+3.2162723e-05
+0.9994572
+0.99973494
+6.019019e-06
+0.00015625419
+7.6220385e-06
+5.322418e-06
+6.7399155e-06
+6.019019e-06
+5.322418e-06
+0.00022004127
+7.6220385e-06
+3.923348e-05
+6.019019e-06
+7.905719e-06
+0.00014466306
+8.940421e-06
+5.322418e-06
+0.0007075034
+8.940421e-06
+6.019019e-06
+7.6220385e-06
+5.322418e-06
+7.905719e-06
+4.237742e-05
+6.243038e-06
+4.237742e-05
+0.0010494431
+8.940421e-06
+0.0002305175
+7.905719e-06
+0.9994147
+8.940421e-06
+0.9995196
+0.00025665603
+3.2162723e-05
+6.243038e-06
+0.00022004127
+7.6220385e-06
+0.00020587152
+0.00017226019
+3.282719e-05
+0.00014466306
+6.019019e-06
+0.9990878
+0.0001594819
+6.7399155e-06
+0.00014466306
+0.9993678
+3.6372072e-05
+7.060129e-06
+7.060129e-06
+3.2162723e-05
+3.2162723e-05
+0.00023281
+6.7399155e-06
+7.6220385e-06
+4.792357e-05
+6.7399155e-06
+5.322418e-06
+0.00022695896
+0.00022695896
+0.99948114
+8.940421e-06
+7.060129e-06
+0.0001594819
+7.905719e-06
+0.9994147
+4.237742e-05
+3.2162723e-05
+7.6220385e-06
+0.00017670133
+7.060129e-06
+6.019019e-06
+6.019019e-06
+6.7399155e-06
+0.99973494
+6.243038e-06
+0.00017226019
+0.00020587152
+6.019019e-06
+4.671893e-05
+3.2162723e-05
+6.243038e-06
+0.00020587152
+4.792357e-05
+6.7399155e-06
+6.7399155e-06
+5.322418e-06
+0.00015625419
+0.00020587152
+2.9776578e-05
+4.237742e-05
+0.9993381
+3.7123496e-05
+0.0001594819
+0.00019060042
+0.00020587152
+0.00023761873
+0.99973494
+0.00017226019
+3.5457782e-05
+0.00020587152
+0.00017670133
+3.2162723e-05
+3.2162723e-05
+3.6372072e-05
+4.237742e-05
+0.00017226019
+0.00015625419
+0.00022695896
+0.00023281
+0.00021012398
+4.792357e-05
+4.237742e-05
+0.00019060042
+4.891363e-05
+3.5457782e-05
+0.00023281
+4.671893e-05
+0.00017670133
+0.00014466306
+0.00017226019
+0.00020587152
+0.00020587152
+0.00017226019
+6.7399155e-06
+3.2162723e-05
+3.5457782e-05
+3.923348e-05
+4.325291e-05
+4.237742e-05
+0.99824166
+0.00017226019
+3.2162723e-05
+0.00017226019
+2.9776578e-05
+0.00022695896
+4.671893e-05
+0.00017226019
+0.00022695896
+4.325291e-05
+0.00019480144
+3.5457782e-05
+3.5457782e-05
+4.325291e-05
+0.99901485
+3.5457782e-05
+0.00020587152
+3.923348e-05
+5.322418e-06
+4.792357e-05
+0.9993381
+0.00017670133
+0.00020587152
+0.00023761873
+3.282719e-05
+0.00020587152
+0.00016359365
+4.671893e-05
+3.2162723e-05
+0.00020587152
+3.6372072e-05
+5.322418e-06
+0.00019060042
+0.00020587152
+4.671893e-05
+0.99955446
+6.7399155e-06
+0.00020587152
+0.9990164
+0.00015625419
+6.7399155e-06
+0.00019060042
+0.00019060042
+0.0001594819
+0.9987974
+0.00020587152
+4.671893e-05
+4.671893e-05
+0.99995637
+0.00020587152
+0.00015625419
+0.00017226019
+2.9776578e-05
+3.923348e-05
+0.00017226019
+0.0001594819
+0.00017226019
+0.00023281
+3.923348e-05
+3.282719e-05
+0.00022695896
+4.671893e-05
+0.00017226019
+0.00017670133
+4.792357e-05
+0.00015625419
+0.00018035136
+4.325291e-05
+3.5457782e-05
+3.2162723e-05
+0.00017226019
+0.00016359365
+0.00018035136
+0.00015625419
+0.00022695896
+0.00017226019
+3.2162723e-05
+4.792357e-05
+0.00019060042
+3.5457782e-05
+0.00022695896
+2.9776578e-05
+0.00015625419
+0.00020587152
+3.6372072e-05
+0.00020587152
+4.792357e-05
+3.5457782e-05
+4.4368186e-05
+6.019019e-06
+4.325291e-05
+4.792357e-05
+0.0001594819
+0.00020587152
+0.00015625419
+3.3673645e-05
+4.671893e-05
+0.00022695896
+3.2162723e-05
+0.00017226019
+7.905719e-06
+3.5457782e-05
+0.9998155
+3.5457782e-05
+0.00017226019
+0.00015625419
+4.792357e-05
+8.940421e-06
+4.4368186e-05
+0.00017670133
+0.00015625419
+0.00020587152
+3.5457782e-05
+0.00021012398
+4.792357e-05
+3.2162723e-05
+4.671893e-05
+4.237742e-05
+4.671893e-05
+0.9979381
+0.00023281
+0.00025665603
+4.237742e-05
+4.671893e-05
+0.00021012398
+3.2162723e-05
+4.671893e-05
+3.5457782e-05
+4.671893e-05
+3.5457782e-05
+3.2162723e-05
+4.671893e-05
+0.00022695896
+3.5457782e-05
+3.6372072e-05
+0.00020587152
+0.00021012398
+0.9999701
+4.009836e-05
+0.00017670133
+5.2833246e-05
+0.00016359365
+0.00021554108
+0.00021554108
+3.7123496e-05
+0.9979381
+4.792357e-05
+4.009836e-05
+0.9996495
+0.00019480144
+0.9999324
+0.9999671
+5.2833246e-05
+0.9999671
+0.9999671
+0.9999013
+0.00017670133
+0.99897456
+0.00023281
+4.891363e-05
+5.2833246e-05
+0.9998155
+0.9996221
+0.00022695896
+0.00016359365
+5.2833246e-05
+5.2833246e-05
+0.9996495
+0.00017670133
+4.792357e-05
+4.009836e-05
+3.6372072e-05
+0.9999671
+0.00017226019
+0.00025665603
+0.9998288
+4.009836e-05
+0.9999255
+3.7123496e-05
+0.00023761873
+4.891363e-05
+0.00015625419
+0.9999255
+0.00019060042
+0.9979381
+0.00019480144
+0.9999671
+3.3673645e-05
+0.9999671
+4.671893e-05
+0.00019480144
+0.99995637
+5.2833246e-05
+0.00023761873
+4.237742e-05
+5.2833246e-05
+3.7123496e-05
+0.00023281
+0.9998155
+0.00018035136
+0.9987974
+0.00023761873
+0.00020587152
+0.9998155
+3.6372072e-05
+0.9998288
+5.2833246e-05
+4.325291e-05
+4.009836e-05
+5.2833246e-05
+0.99824166
+4.009836e-05
+4.891363e-05
+0.99994016
+0.9979381
+0.9979381
+0.00015625419
+5.2833246e-05
+0.9999255
+0.9979381
+4.792357e-05
+0.99897456
+0.00020587152
+5.2833246e-05
+0.9999671
+0.00022695896
+0.00025665603
+0.9987974
+5.2833246e-05
+4.792357e-05
+4.009836e-05
+4.891363e-05
+0.9996221
+0.00025665603
+5.2833246e-05
+0.00025665603
+0.99897456
+5.2833246e-05
+0.99897456
+0.00023281
+0.9996495
+0.00025665603
+0.00023281
+0.9999671
+0.00019480144
+0.9999255
+0.00017670133
+0.00023281
+0.00018035136
+4.237742e-05
+0.00025665603
+4.891363e-05
+0.00018035136
+5.2833246e-05
+0.9999671
+5.2833246e-05
+0.9999671
+0.00019480144
+4.009836e-05
+0.9999255
+0.00025665603
+0.9987974
+0.00025665603
+0.00018035136
+0.00017670133
+3.7123496e-05
+0.9996495
+4.009836e-05
+0.00021554108
+0.00019060042
+0.99995637
+0.9999709
+0.00019480144
+3.7123496e-05
+4.009836e-05
+3.5457782e-05
+0.9999709
+0.00019480144
+0.00019480144
+0.9999671
+0.9996221
+0.00023281
+0.00017670133
+0.00023281
+3.7123496e-05
+4.237742e-05
+4.009836e-05
+0.00018035136
+0.99995637
+0.00019480144
+0.00017226019
+4.009836e-05
+3.7123496e-05
+3.7123496e-05
+5.2833246e-05
+0.00025665603
+4.792357e-05
+0.9996221
+0.9999255
+0.99897456
+0.00021554108
+3.5457782e-05
+5.2833246e-05
+4.009836e-05
+0.00023281
+3.6372072e-05
+5.2833246e-05
+4.891363e-05
+3.2162723e-05
+3.5457782e-05
+0.99995637
+0.99995637
+0.9996221
+0.99897456
+5.2833246e-05
+0.9998288
+4.009836e-05
+0.99995637
+0.00021554108
+0.99994016
+0.9999105
+5.2833246e-05
+3.923348e-05
+0.99996495
+0.00023281
+0.9999701
+0.9999671
+0.00019480144
+0.9999341
+0.9999341
+0.9987974
+0.9999709
+0.9999255
+0.00016359365
+0.9998617
+0.9999701
+0.9999341
+0.9999701
+0.9999709
+0.9999701
+0.9999324
+0.9979381
+0.9999709
+0.9999324
+0.9999671
+0.9999013
+4.009836e-05
+0.9998288
+0.9979381
+0.9999709
+0.00025665603
+0.99824166
+3.6372072e-05
+5.2833246e-05
+0.9999341
+0.9999701
+0.9999709
+0.9999709
+0.00015625419
+0.99995637
+0.9999614
+3.6372072e-05
+0.00019480144
+0.9999255
+0.9999709
+0.9999709
+0.9999701
+0.99994016
+0.99997354
+0.00023761873
+0.99995637
+0.99996495
+0.9999324
+0.00017670133
+0.00019480144
+0.00017670133
+0.009167032
+0.9999341
+5.2833246e-05
+0.9999126
+4.009836e-05
+0.9999604
+0.9999341
+0.9999341
+0.9999126
+0.9999709
+0.9999341
+0.9999126
+0.00019480144
+0.9999671
+0.9999671
+0.9999324
+0.9999126
+0.9999709
+0.9999604
+0.9999341
+0.99996495
+0.99994016
+0.9999255
+0.9999604
+0.9999341
+0.9999255
+0.9999341
+0.99997354
+0.9999701
+0.9999324
+0.9999207
+0.99997354
+0.99994016
+0.9999126
+0.9999324
+0.9999709
+0.9999207
+0.99994016
+0.00037019775
+0.9999207
+0.99996495
+0.99997354
+0.9999671
+0.9999207
+0.99996495
+0.0013293574
+0.99994016
+0.9999324
+0.99996495
+0.9999604
+0.9999105
+0.9999701
+0.9999324
+0.9999701
+0.9999341
+0.9999324
+0.99997354
+0.9999126
+0.99997354
+0.9999207
+0.9999207
+0.9999341
+0.99995637
+0.9999709
+0.9999701
+0.99997354
+0.99997354
+0.99997354
+0.9999604
+0.9999709
+0.9999255
+0.9999341
+0.9999126
+0.9999105
+0.9999701
+0.0008625914
+0.99997354
+0.99997354
+0.99995637
+0.9999341
+0.9999255
+0.9999341
+0.9999324
+0.99994016
+0.9999013
+0.9999207
+0.9999709
+0.9999701
+0.9999324
+0.9992411
+0.99997354
+0.9999013
+0.9999324
+0.9999324
+0.9999701
+0.9999341
+0.9999324
+0.9999105
+0.9999701
+0.9999709
+0.9999207
+0.9999709
+0.9999126
+0.99994016
+0.99982506
+0.9999341
+0.00046149982
+0.9999639
+0.99996495
+0.99996495
+0.9996221
+0.9999255
+0.99997354
+0.99996495
+0.9999255
+0.9999105
+0.00078249123
+0.9999604
+0.99994016
+0.9999709
+0.00025665603
+0.99994016
+0.99489474
+0.9998155
+0.9999255
+0.9999324
+0.9999614
+0.9999701
+0.9999671
+0.9999324
+0.9999671
+0.00039583017
+0.9999614
+0.9999709
+0.9999614
+0.9999709
+0.9999701
+0.9999701
+0.9999341
+0.9999207
+0.9999341
+0.9999709
+0.00039583017
+0.9999207
+0.9999701
+0.99995637
+0.99982506
+0.9996221
+0.9999207
+0.9999671
+0.9999341
+0.9999126
+0.9999255
+0.9999324
+0.9999255
+0.99985075
+0.9999614
+0.0009514644
+0.99994016
+0.9999671
+0.9992411
+0.009360342
+0.9999105
+0.9999207
+0.99994016
+0.0004272755
+0.9998312
+0.99980205
+0.99982506
+0.99980205
+0.0007991346
+0.9999255
+0.0004272755
+0.9999324
+0.0006919931
+0.00078249123
+0.9999207
+0.9990392
+0.0012328194
+0.0007991346
+0.9990392
+0.9999614
+0.99997354
+0.9999299
+0.98975986
+0.00088093686
+0.00088093686
+0.99998844
+0.00043636683
+0.0006919931
+0.99996495
+0.009360342
+0.9971035
+0.99997354
+0.9999701
+0.99980205
+0.99489474
+0.99927515
+0.9943492
+0.9991503
+0.99927515
+0.9998617
+0.9999341
+0.9990822
+0.9991503
+0.00084514386
+0.0007474052
+0.9991503
+0.004096335
+0.9999671
+0.99527174
+0.9999639
+0.9990392
+0.9997862
+0.99996495
+0.99051267
+0.013955284
+0.008114705
+0.9890587
+0.00076283637
+0.00093165156
+0.008114705
+0.00039583017
+0.99994016
+0.99527174
+0.00078249123
+0.99918026
+0.9999832
+0.99998736
+0.00040811044
+0.99927515
+0.99932885
+0.99997354
+0.9999639
+0.00047131904
+0.9999701
+0.9998312
+0.00086311874
+0.9991503
+0.99051243
+0.98975986
+0.9990392
+0.9992411
+0.99980205
+0.9998617
+0.001503084
+0.0047280774
+0.999936
+0.99997354
+0.0008239167
+0.98955053
+0.99980205
+0.00040811044
+0.9999832
+0.9990392
+0.0006919931
+0.99998736
+0.9999832
+0.99998736
+0.008151155
+0.98955053
+0.9999341
+0.9999013
+0.99998736
+0.9999639
+0.99997354
+0.99980205
+0.9998617
+0.0009514644
+0.9998617
+0.99997354
+0.99998736
+0.99918026
+0.00040811044
+0.99982506
+0.9998437
+0.9943492
+0.9991503
+0.00046149982
+0.9990392
+0.009360342
+0.016082935
+0.99998736
+0.9999299
+0.9998312
+0.00093165156
+0.0003778439
+0.9991503
+0.9999639
+0.9991503
+0.009167032
+0.0007474052
+0.9990822
+0.0007991346
+0.99918026
+0.99478984
+0.98955053
+0.99982506
+0.001503084
+0.99998736
+0.0011414601
+0.9967257
+0.99997354
+0.99998736
+0.99998736
+0.99997354
+0.9998617
+0.99051243
+0.9999832
+0.0013293574
+0.0011414601
+0.9999207
+0.0013939476
+0.00039583017
+0.98955053
+0.99478984
+0.99985075
+0.9991503
+0.99998736
+0.98955053
+0.9992411
+0.00034274196
+0.99994016
+0.999811
+0.99478984
+0.99437463
+0.99998844
+0.9998312
+0.00093165156
+0.98975986
+0.001503084
+0.99997354
+0.9999324
+0.99998736
+0.9999614
+0.9990392
+0.0013293574
+0.00086311874
+0.99996495
+0.9999207
+0.9991503
+0.9999126
+0.99527174
+0.0013293574
+0.99994016
+0.999936
+0.99996805
+0.9999708
+0.9999877
+0.9999832
+0.99996364
+0.9999888
+0.99998605
+0.99998367
+0.9999877
+0.99996483
+0.9999888
+0.9999678
+0.9999852
+0.999967
+0.9999434
+0.9999678
+0.99996483
+0.99998605
+0.9999708
+0.99996483
+0.9999639
+0.9999888
+0.99998736
+0.99998724
+0.9999678
+0.99996364
+0.9999815
+0.99996483
+0.999938
+0.99996805
+0.9999851
+0.9999331
+0.99992275
+0.999938
+0.9999602
+0.99998605
+0.99998975
+0.9999678
+0.99996483
+0.9999877
+0.9999639
+0.9999888
+0.99998605
+0.99998975
+0.99998605
+0.9999685
+0.9999815
+0.9999864
+0.9999864
+0.9999888
+0.9999888
+0.99996483
+0.99998605
+0.99992275
+0.99998736
+0.99998724
+0.9999864
+0.999967
+0.99998605
+0.99998903
+0.99998724
+0.99996364
+0.9999708
+0.9999888
+0.9999708
+0.999984
+0.9999708
+0.9999602
+0.99996805
+0.99998605
+0.99998844
+0.9999888
+0.9999877
+0.99998605
+0.99998724
+0.9999851
+0.99993765
+0.9999851
+0.99998903
+0.999967
+6.9338246e-05
+0.9999831
+0.9999877
+0.99996483
+0.99996483
+1.618272e-05
+0.9999815
+0.9999639
+0.9999708
+0.999967
+0.99998474
+0.9999877
+0.99996805
+0.9999434
+0.99998724
+0.9999602
+0.9999888
+0.9999708
+0.9999851
+0.99996805
+0.99998367
+0.9999877
+0.99998367
+0.9999434
+0.9999708
+0.99996483
+0.99998605
+0.99992275
+0.9999434
+0.9999685
+5.9588056e-05
+0.999938
+0.9999815
+0.999967
+0.9999678
+0.99996483
+0.99996877
+0.9999852
+0.9999602
+0.99998903
+0.99992275
+0.9999714
+0.99992275
+0.99998546
+0.9999317
+0.99996483
+0.9999317
+0.99998367
+0.9999602
+0.9999888
+0.9999888
+0.9999888
+0.99996483
+0.99998724
+0.00013585434
+0.9999317
+0.9999299
+0.9999678
+0.999938
+0.9999831
+0.9999685
+0.9999317
+0.9999864
+0.99998605
+0.99998367
+0.9999708
+0.9999602
+0.99998605
+0.9999851
+0.9999602
+0.9999877
+0.99998736
+0.99998736
+0.99998903
+0.99998367
+0.0001542339
+0.9999678
+0.99996364
+0.9999678
+0.99996483
+3.2848795e-05
+0.9999815
+0.9999602
+0.9999888
+0.99999
+0.9999852
+0.9999639
+0.9999877
+0.99996805
+0.9999602
+0.9999888
+0.9999602
+0.9999888
+0.99998546
+0.00017812874
+0.9999888
+0.99998975
+0.99996364
+0.9999602
+0.9999815
+0.9999888
+0.9999888
+0.99998975
+0.9999393
+0.9999877
+0.99996483
+0.9999602
+5.9588056e-05
+0.00083521125
+3.2848795e-05
+0.99998367
+0.99996555
+0.00035159392
+0.9999852
+0.99998903
+0.9999602
+0.999984
+0.99998796
+0.9999877
+0.9999678
+0.0015203392
+0.99996555
+0.9999602
+0.99998796
+0.99998844
+0.00017812874
+0.99998903
+0.99998903
+0.99998796
+0.99994457
+0.9999678
+3.793864e-05
+3.0411753e-05
+0.99996805
+0.004148995
+0.99998903
+0.9999815
+5.9588056e-05
+5.1143885e-05
+0.9999852
+0.99998796
+3.689701e-05
+0.99999
+0.00013585434
+0.0007576517
+0.99998534
+0.99996555
+0.9999393
+0.99993896
+0.9999639
+0.00032551744
+0.99998903
+0.99996555
+0.99996555
+0.99996877
+0.99996877
+0.0001542339
+0.99998903
+0.99994457
+0.99999
+0.99998367
+0.9999815
+0.9999393
+0.0001542339
+0.9999331
+0.9999602
+6.9338246e-05
+0.99996805
+0.99999
+3.689701e-05
+0.9999888
+1.618272e-05
+0.99998903
+0.00035159392
+0.99998736
+0.9999851
+0.99998796
+1.8690242e-05
+0.99998903
+0.9999685
+0.99998903
+0.00016491521
+0.9988481
+1.8690242e-05
+1.8300698e-05
+0.99996483
+0.99996555
+0.00013585434
+0.99998903
+0.99996555
+0.999984
+3.0411753e-05
+0.99993765
+0.99998796
+3.793864e-05
+0.99993896
+0.99998796
+0.99996877
+0.99998796
+0.99998796
+0.0001542339
+3.2848795e-05
+0.99996877
+0.999984
+7.4894415e-05
+0.99992275
+0.00017812874
+0.99996805
+0.9999888
+0.0007576517
+0.99996555
+1.8690242e-05
+0.9985933
+0.99996877
+3.793864e-05
+0.00013585434
+6.8820795e-05
+0.99996877
+0.99996877
+0.00017812874
+0.99998677
+1.8300698e-05
+0.99998546
+0.99998903
+0.99998677
+0.9999331
+0.9999331
+0.9999331
+0.9988721
+0.9917278
+0.9999393
+0.9999864
+0.99996805
+0.99998534
+0.0001542339
+0.9999393
+0.99998903
+0.99996877
+0.00035159392
+0.99998546
+0.9999815
+1.618272e-05
+0.99996555
+5.223249e-05
+0.00014279263
+0.99998903
+0.99998796
+0.0023245455
+0.99996555
+0.99998903
+0.9999331
+3.793864e-05
+0.00035159392
+0.99996555
+3.793864e-05
+0.9999331
+0.9912554
+0.00017812874
+0.9999331
+0.00013585434
+0.99996483
+0.99998796
+0.99998796
+0.99996877
+6.8820795e-05
+0.9999714
+1.8300698e-05
+0.00014279263
+0.9999888
+0.99996877
+0.9999685
+0.99998724
+3.5123998e-05
+6.9338246e-05
+3.689701e-05
+0.004572132
+0.99993896
+0.9999714
+0.9999393
+0.99998796
+0.0036705781
+0.9912554
+0.99998903
+0.99996555
+0.004045122
+1.8690242e-05
+0.00032551744
+0.999984
+0.9999685
+0.99998546
+7.4894415e-05
+0.00032551744
+0.00017812874
+3.793864e-05
+0.99999
+0.99998796
+0.00010311027
+0.9999602
+0.99998903
+0.99998975
+3.5123998e-05
+0.99996555
+1.8300698e-05
+3.2848795e-05
+0.99878174
+0.00013585434
+0.00013585434
+0.00016491521
+1.8300698e-05
+0.99996877
+0.00013585434
+0.99996877
+0.0001542339
+0.99996555
+1.618272e-05
+0.9999685
+0.0001542339
+0.99998605
+0.99998534
+0.999984
+0.0016758427
+0.99998546
+0.99996364
+0.99998534
+1.8690242e-05
+0.99998546
+0.9999685
+0.0009444215
+0.9999299
+0.004045122
+6.9338246e-05
+1.8690242e-05
+0.00035159392
+0.99996877
+5.9588056e-05
+6.8820795e-05
+0.99998534
+3.2848795e-05
+0.0017189811
+1.8690242e-05
+0.99999
+0.9999678
+0.99993896
+0.00010311027
+0.99996555
+0.9999888
+3.2848795e-05
+0.00083521125
+0.9999685
+0.00013585434
+0.999984
+0.99998903
+6.8820795e-05
+6.8820795e-05
+0.00032551744
+0.9999714
+0.00035159392
+0.00016491521
+0.00016491521
+3.793864e-05
+0.99998546
+1.8690242e-05
+0.99996877
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index aa8b855..455070a 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -880,7 +880,7 @@
                                         <exclude>src/main/java/org/apache/ignite/examples/streaming/wordcount/*.txt</exclude><!--books examples-->
                                         <exclude>examples/src/main/java/org/apache/ignite/examples/streaming/wordcount/*.txt</exclude><!--books examples-->
                                         <exclude>**/resources/datasets/**/*</exclude><!--Datasets in ml module-->
-                                        <exclude>**/*.pb</exclude><!--Pre-trained TF model-->
+                                        <exclude>**/resources/models/**/*</exclude><!--Pre-trained ml models-->
                                         <exclude>src/main/java/org/jetbrains/annotations/*.java</exclude><!--copyright-->
                                         <exclude>dev-tools/IGNITE-*.patch</exclude>
                                         <exclude>dev-tools/.gradle/**/*</exclude>

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 54756bb..2bcdf16 100644
--- a/pom.xml
+++ b/pom.xml
@@ -94,6 +94,7 @@
         <module>modules/rocketmq</module>
         <module>modules/sqlline</module>
         <module>modules/ml</module>
+        <module>modules/ml/xgboost-model-parser</module>
         <module>modules/tensorflow</module>
     </modules>
 


[31/52] [abbrv] ignite git commit: IGNITE-10709 New inspections introduced in 2018+ IntelliJ IDEA version were disabled on TC configuration, unused Suppress removal. - Fixes #5680.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
index d4ec78f..3adc282 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProcessor.java
@@ -208,7 +208,6 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void onKernalStart(boolean active) throws IgniteCheckedException {
         if (ctx.isDaemon() || !active)
             return;
@@ -799,7 +798,6 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
     /**
      * @return Future.
      */
-    @SuppressWarnings("unchecked")
     public IgniteInternalFuture<?> cancelAll() {
         Iterator<Cache.Entry<Object, Object>> it = serviceEntries(ServiceDeploymentPredicate.INSTANCE);
 
@@ -999,7 +997,6 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
      * @param <T> Service type.
      * @return Service by specified service name.
      */
-    @SuppressWarnings("unchecked")
     public <T> T service(String name) {
         ctx.security().authorize(name, SecurityPermission.SERVICE_INVOKE, null);
 
@@ -1064,7 +1061,6 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
      * @return The proxy of a service by its name and class.
      * @throws IgniteException If failed to create proxy.
      */
-    @SuppressWarnings("unchecked")
     public <T> T serviceProxy(ClusterGroup prj, String name, Class<? super T> svcItf, boolean sticky, long timeout)
         throws IgniteException {
         ctx.security().authorize(name, SecurityPermission.SERVICE_INVOKE, null);
@@ -1106,7 +1102,6 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
      * @param <T> Service type.
      * @return Services by specified service name.
      */
-    @SuppressWarnings("unchecked")
     public <T> Collection<T> services(String name) {
         ctx.security().authorize(name, SecurityPermission.SERVICE_INVOKE, null);
 
@@ -1570,7 +1565,6 @@ public class GridServiceProcessor extends GridProcessorAdapter implements Ignite
     /**
      * Service deployment listener.
      */
-    @SuppressWarnings("unchecked")
     private class ServiceEntriesListener implements CacheEntryUpdatedListener<Object, Object> {
         /** {@inheritDoc} */
         @Override public void onUpdated(final Iterable<CacheEntryEvent<?, ?>> deps) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
index eb2d509..4d98187 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/GridServiceProxy.java
@@ -104,7 +104,6 @@ public class GridServiceProxy<T> implements Serializable {
      * @param timeout Service availability wait timeout. Cannot be negative.
      * @param ctx Context.
      */
-    @SuppressWarnings("unchecked")
     public GridServiceProxy(ClusterGroup prj,
         String name,
         Class<? super T> svc,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceContextImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceContextImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceContextImpl.java
index 490b598..f624334 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceContextImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceContextImpl.java
@@ -106,7 +106,6 @@ public class ServiceContextImpl implements ServiceContext {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <K> K affinityKey() {
         return (K)affKey;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceDescriptorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceDescriptorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceDescriptorImpl.java
index 9ec3eb0..4db44cb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceDescriptorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/service/ServiceDescriptorImpl.java
@@ -88,7 +88,6 @@ public class ServiceDescriptorImpl implements ServiceDescriptor {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <K> K affinityKey() {
         return (K)dep.configuration().getAffinityKey();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
index e24e644..83e156a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskProcessor.java
@@ -548,7 +548,6 @@ public class GridTaskProcessor extends GridProcessorAdapter implements IgniteCha
      * @param execName Name of the custom executor.
      * @return Task future.
      */
-    @SuppressWarnings("unchecked")
     private <T, R> ComputeTaskInternalFuture<R> startTask(
         @Nullable String taskName,
         @Nullable Class<?> taskCls,
@@ -1134,7 +1133,6 @@ public class GridTaskProcessor extends GridProcessorAdapter implements IgniteCha
      * @param nodeId Node ID.
      * @param msg Task session request.
      */
-    @SuppressWarnings({"unchecked"})
     private void processTaskSessionRequest(UUID nodeId, GridTaskSessionRequest msg) {
         assert nodeId != null;
         assert msg != null;
@@ -1244,7 +1242,6 @@ public class GridTaskProcessor extends GridProcessorAdapter implements IgniteCha
     /**
      * Listener for individual task events.
      */
-    @SuppressWarnings({"deprecation"})
     private class TaskEventListener implements GridTaskEventListener {
         /** */
         private final GridMessageListener msgLsnr = new JobMessageListener(false);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
index 16461c9..3eef2b6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/task/GridTaskWorker.java
@@ -357,7 +357,6 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject {
      * @param key Thread-local context key.
      * @return Thread-local context value, if any.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable private <V> V getThreadContext(GridTaskThreadContextKey key) {
         return thCtx == null ? null : (V)thCtx.get(key);
     }
@@ -469,7 +468,6 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject {
     /**
      * Maps this task's jobs to nodes and sends them out.
      */
-    @SuppressWarnings({"unchecked"})
     @Override protected void body() {
         evtLsnr.onTaskStarted(this);
 
@@ -1647,7 +1645,6 @@ class GridTaskWorker<T, R> extends GridWorker implements GridTimeoutObject {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public boolean equals(Object obj) {
         if (this == obj)
             return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridArrays.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridArrays.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridArrays.java
index 75d73ee..47680fe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridArrays.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridArrays.java
@@ -58,7 +58,6 @@ public final class GridArrays {
      * @param idx Index to remove.
      * @return Smaller array.
      */
-    @SuppressWarnings("unchecked")
     public static <T> T[] remove(T[] arr, int idx) {
         int len = arr.length;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashMap.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashMap.java
index ee6e9f5..d3f5c33 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashMap.java
@@ -119,7 +119,6 @@ public class GridBoundedLinkedHashMap<K, V> extends LinkedHashMap<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public Object clone() {
         GridBoundedLinkedHashMap<K, V> m = (GridBoundedLinkedHashMap<K, V>)super.clone();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashSet.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashSet.java
index 7880190..9bae9eb 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridBoundedLinkedHashSet.java
@@ -199,7 +199,6 @@ public class GridBoundedLinkedHashSet<E> extends GridSerializableSet<E> implemen
      * @return a shallow copy of this set.
      * @throws CloneNotSupportedException Thrown if cloning is not supported.
      */
-    @SuppressWarnings("unchecked")
     @Override public Object clone() throws CloneNotSupportedException {
         GridBoundedLinkedHashSet<E> newSet = (GridBoundedLinkedHashSet<E>)super.clone();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridConcurrentSkipListSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridConcurrentSkipListSet.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridConcurrentSkipListSet.java
index 688e164..dbb397b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridConcurrentSkipListSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridConcurrentSkipListSet.java
@@ -108,7 +108,7 @@ public class GridConcurrentSkipListSet<E> extends GridSerializableSet<E> impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked", "CloneCallsConstructors"})
+    @SuppressWarnings({"CloneCallsConstructors"})
     @Override public GridConcurrentSkipListSet<E> clone() {
         try {
             GridConcurrentSkipListSet<E> clone = (GridConcurrentSkipListSet<E>)super.clone();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java
index 5452a25..eaf54e4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanMap.java
@@ -256,7 +256,7 @@ public class GridLeanMap<K, V> extends GridSerializableMap<K, V> implements Clon
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked", "CloneDoesntDeclareCloneNotSupportedException"})
+    @SuppressWarnings({"CloneDoesntDeclareCloneNotSupportedException"})
     @Override protected Object clone() {
         try {
             GridLeanMap<K, V> clone = (GridLeanMap<K, V>)super.clone();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanSet.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanSet.java
index 125e61f..5be1e67 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridLeanSet.java
@@ -63,7 +63,6 @@ public class GridLeanSet<E> extends GridSetWrapper<E> implements Cloneable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings( {"unchecked"})
     @Override public Object clone() {
         try {
             GridLeanSet<E> clone = (GridLeanSet<E>)super.clone();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridListSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridListSet.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridListSet.java
index 6f49c1b..9ceeda3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridListSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridListSet.java
@@ -242,7 +242,6 @@ public class GridListSet<V> extends GridSerializableSet<V> implements Cloneable
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings( {"unchecked"})
     @Override public boolean remove(Object val) {
         A.notNull(val, "val");
 
@@ -339,7 +338,6 @@ public class GridListSet<V> extends GridSerializableSet<V> implements Cloneable
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings( {"unchecked"})
     @Override public boolean contains(Object val) {
         A.notNull(val, "val");
 
@@ -393,7 +391,6 @@ public class GridListSet<V> extends GridSerializableSet<V> implements Cloneable
      * @return Clone of this set.
      * @throws CloneNotSupportedException
      */
-    @SuppressWarnings( {"unchecked"})
     @Override protected Object clone() throws CloneNotSupportedException {
         GridListSet<V> clone = (GridListSet<V>)super.clone();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/GridSetWrapper.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/GridSetWrapper.java b/modules/core/src/main/java/org/apache/ignite/internal/util/GridSetWrapper.java
index fb5a793..760b794 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/GridSetWrapper.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/GridSetWrapper.java
@@ -43,7 +43,6 @@ public class GridSetWrapper<E> extends GridSerializableSet<E> {
      *
      * @param map Map to be used for set implementation.
      */
-    @SuppressWarnings({"unchecked"})
     public GridSetWrapper(Map<E, ?> map) {
         A.notNull(map, "map");
 
@@ -77,7 +76,6 @@ public class GridSetWrapper<E> extends GridSerializableSet<E> {
      *
      * @return Wrapped map.
      */
-    @SuppressWarnings({"unchecked"})
     protected final <T extends Map<E, Object>> T  map() {
         return (T)map;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 2f8eb1c..1d9a0ad 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -1179,7 +1179,6 @@ public abstract class IgniteUtils {
      *
      * @deprecated Calls to this method should never be committed to master.
      */
-    @SuppressWarnings("deprecation")
     @Deprecated
     public static void dumpStack() {
         dumpStack("Dumping stack.");
@@ -1637,7 +1636,6 @@ public abstract class IgniteUtils {
      * @return New instance of the class or {@code null} if empty constructor could not be assigned.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <T> T forceNewInstance(Class<?> cls) throws IgniteCheckedException {
         Constructor ctor = forceEmptyConstructor(cls);
 
@@ -5246,7 +5244,6 @@ public abstract class IgniteUtils {
      * @throws IOException If de-serialization failed.
      * @throws ClassNotFoundException If deserialized class could not be found.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <K, V> Map<K, V> readMap(ObjectInput in) throws IOException, ClassNotFoundException {
         int size = in.readInt();
 
@@ -5267,7 +5264,6 @@ public abstract class IgniteUtils {
      * @throws IOException If de-serialization failed.
      * @throws ClassNotFoundException If deserialized class could not be found.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <K, V> TreeMap<K, V> readTreeMap(
         ObjectInput in) throws IOException, ClassNotFoundException {
         int size = in.readInt();
@@ -5291,7 +5287,6 @@ public abstract class IgniteUtils {
      * @throws IOException If de-serialization failed.
      * @throws ClassNotFoundException If deserialized class could not be found.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <K, V> HashMap<K, V> readHashMap(ObjectInput in)
         throws IOException, ClassNotFoundException {
         int size = in.readInt();
@@ -5315,7 +5310,6 @@ public abstract class IgniteUtils {
      * @throws IOException If de-serialization failed.
      * @throws ClassNotFoundException If deserialized class could not be found.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <K, V> LinkedHashMap<K, V> readLinkedMap(ObjectInput in)
         throws IOException, ClassNotFoundException {
         int size = in.readInt();
@@ -5356,7 +5350,6 @@ public abstract class IgniteUtils {
      * @throws IOException If de-serialization failed.
      * @throws ClassNotFoundException If deserialized class could not be found.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <V> Map<Integer, V> readIntKeyMap(ObjectInput in) throws IOException,
         ClassNotFoundException {
         int size = in.readInt();
@@ -5398,7 +5391,6 @@ public abstract class IgniteUtils {
      * @return Read map.
      * @throws IOException If de-serialization failed.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static Map<Integer, Integer> readIntKeyIntValueMap(DataInput in) throws IOException {
         Map<Integer, Integer> map = null;
 
@@ -5421,7 +5413,6 @@ public abstract class IgniteUtils {
      * @throws IOException If deserialization failed.
      * @throws ClassNotFoundException If deserialized class could not be found.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <E> List<E> readList(ObjectInput in) throws IOException, ClassNotFoundException {
         int size = in.readInt();
 
@@ -7049,7 +7040,6 @@ public abstract class IgniteUtils {
      * @param bLen Length of prefix {@code b}.
      * @return Increasing array which is union of {@code a} and {@code b}.
      */
-    @SuppressWarnings("IfMayBeConditional")
     public static int[] unique(int[] a, int aLen, int[] b, int bLen) {
         assert a != null;
         assert b != null;
@@ -7092,7 +7082,6 @@ public abstract class IgniteUtils {
      * @param bLen Length of prefix {@code b}.
      * @return Increasing array which is difference between {@code a} and {@code b}.
      */
-    @SuppressWarnings("IfMayBeConditional")
     public static int[] difference(int[] a, int aLen, int[] b, int bLen) {
         assert a != null;
         assert b != null;
@@ -7358,7 +7347,6 @@ public abstract class IgniteUtils {
      *
      * @deprecated Calls to this method should never be committed to master.
      */
-    @SuppressWarnings("deprecation")
     @Deprecated
     public static void dumpStack(Thread t) {
         dumpStack(t, System.err);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
index 42ec397..786d647 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/StripedCompositeReadWriteLock.java
@@ -209,7 +209,6 @@ public class StripedCompositeReadWriteLock implements ReadWriteLock {
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("NullableProblems")
         @Override public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
             int i = 0;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
index 2299dcc..45465be 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridCompoundFuture.java
@@ -161,7 +161,6 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      *
      * @return Collection of futures.
      */
-    @SuppressWarnings("unchecked")
     public final synchronized Collection<IgniteInternalFuture<T>> futures() {
         if (futs == null)
             return Collections.emptyList();
@@ -221,7 +220,6 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
      *
      * @param fut Future to add.
      */
-    @SuppressWarnings("unchecked")
     public final void add(IgniteInternalFuture<T> fut) {
         assert fut != null;
 
@@ -339,7 +337,6 @@ public class GridCompoundFuture<T, R> extends GridFutureAdapter<R> implements Ig
     /**
      * @return Futures size.
      */
-    @SuppressWarnings("unchecked")
     protected final int futuresCountNoLock() {
         assert Thread.holdsLock(this);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFinishedFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFinishedFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFinishedFuture.java
index b149035..926def2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFinishedFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFinishedFuture.java
@@ -75,7 +75,6 @@ public class GridFinishedFuture<T> implements IgniteInternalFuture<T> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public T result() {
         return resFlag == RES ? (T)res : null;
     }
@@ -96,7 +95,6 @@ public class GridFinishedFuture<T> implements IgniteInternalFuture<T> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public T get() throws IgniteCheckedException {
         if (resFlag == ERR)
             throw U.cast((Throwable)res);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFutureAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFutureAdapter.java
index 6eafe48..cddb19c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFutureAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/future/GridFutureAdapter.java
@@ -124,7 +124,6 @@ public class GridFutureAdapter<R> implements IgniteInternalFuture<R> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public R result() {
         Object state0 = state;
 
@@ -251,7 +250,6 @@ public class GridFutureAdapter<R> implements IgniteInternalFuture<R> {
      * @return Result.
      * @throws IgniteCheckedException If resolved to exception.
      */
-    @SuppressWarnings("unchecked")
     private R resolve() throws IgniteCheckedException {
         if(state == CANCELLED)
             throw new IgniteFutureCancelledCheckedException("Future was cancelled: " + this);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/future/IgniteFutureImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/future/IgniteFutureImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/util/future/IgniteFutureImpl.java
index a018628..6978501 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/future/IgniteFutureImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/future/IgniteFutureImpl.java
@@ -198,7 +198,6 @@ public class IgniteFutureImpl<V> implements IgniteFuture<V> {
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public boolean equals(Object obj) {
             if (obj == null || !obj.getClass().equals(InternalFutureListener.class))
                 return false;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
index 1094de3..2d4d1cf 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridFunc.java
@@ -1007,7 +1007,6 @@ public class GridFunc {
      * @param <T1> Type of the collection.
      * @return Light-weight view on given collection with provided predicate.
      */
-    @SuppressWarnings("RedundantTypeArguments")
     @SafeVarargs
     public static <T1, T2> Collection<T2> viewReadOnly(@Nullable final Collection<? extends T1> c,
         final IgniteClosure<? super T1, T2> trans, @Nullable final IgnitePredicate<? super T1>... p) {
@@ -1291,7 +1290,6 @@ public class GridFunc {
      * @return Factory closure that creates new {@link Set} instance every time
      *      its {@link org.apache.ignite.lang.IgniteOutClosure#apply()} method is called.
      */
-    @SuppressWarnings("unchecked")
     public static <T> IgniteCallable<Set<T>> newSet() {
         return (IgniteCallable<Set<T>>)SET_FACTORY;
     }
@@ -1305,7 +1303,6 @@ public class GridFunc {
      * @return Factory closure that creates new {@link Map} instance every
      *      time its {@link org.apache.ignite.lang.IgniteOutClosure#apply()} method is called.
      */
-    @SuppressWarnings("unchecked")
     @Deprecated
     public static <K, V> IgniteCallable<Map<K, V>> newMap() {
         return (IgniteCallable<Map<K, V>>)MAP_FACTORY;
@@ -1320,7 +1317,6 @@ public class GridFunc {
      * @return Factory closure that creates new {@link Map} instance every
      *      time its {@link org.apache.ignite.lang.IgniteOutClosure#apply()} method is called.
      */
-    @SuppressWarnings("unchecked")
     public static <K, V> IgniteCallable<ConcurrentMap<K, V>> newCMap() {
         return (IgniteCallable<ConcurrentMap<K, V>>)CONCURRENT_MAP_FACTORY;
     }
@@ -1332,7 +1328,6 @@ public class GridFunc {
      * @return Factory closure that creates new {@link GridConcurrentHashSet} instance every
      *      time its {@link org.apache.ignite.lang.IgniteOutClosure#apply()} method is called.
      */
-    @SuppressWarnings("unchecked")
     public static <E> IgniteCallable<Set<E>> newCSet() {
         return (IgniteCallable<Set<E>>)CONCURRENT_SET_FACTORY;
     }
@@ -1413,7 +1408,6 @@ public class GridFunc {
      * @param <T> Type of the free variable, i.e. the element the predicate is called on.
      * @return Predicate that always returns {@code true}.
      */
-    @SuppressWarnings( {"unchecked"})
     public static <T> IgnitePredicate<T> alwaysTrue() {
         return (IgnitePredicate<T>)ALWAYS_TRUE;
     }
@@ -1425,7 +1419,6 @@ public class GridFunc {
      * @param <T> Type of the free variable, i.e. the element the predicate is called on.
      * @return Predicate that always returns {@code false}.
      */
-    @SuppressWarnings( {"unchecked"})
     public static <T> IgnitePredicate<T> alwaysFalse() {
         return (IgnitePredicate<T>)ALWAYS_FALSE;
     }
@@ -1720,7 +1713,6 @@ public class GridFunc {
      * @param it Iterable to fetch.
      * @return Modified target collection.
      */
-    @SuppressWarnings("unchecked")
     @Deprecated
     public static <T, C extends Collection<T>> C addAll(C c, Iterable<? extends T> it) {
         if (it == null)
@@ -1909,7 +1901,6 @@ public class GridFunc {
      * @param <X> Type of the free variable for the closure and type of the array
      *      elements.
      */
-    @SuppressWarnings("RedundantTypeArguments")
     @Deprecated
     public static <X> void forEach(X[] c, IgniteInClosure<? super X> f, @Nullable IgnitePredicate<? super X>... p) {
         A.notNull(c, "c", f, "f");
@@ -3030,7 +3021,6 @@ public class GridFunc {
      * @param <V> Value type.
      * @return Closure that returns value for an entry.
      */
-    @SuppressWarnings({"unchecked"})
     public static <K, V> IgniteClosure<Cache.Entry<K, V>, V> cacheEntry2Get() {
         return (IgniteClosure<Cache.Entry<K, V>, V>)CACHE_ENTRY_VAL_GET;
     }
@@ -3042,7 +3032,6 @@ public class GridFunc {
      * @param <V> Cache value type.
      * @return Predicate which returns {@code true} if entry has peek value.
      */
-    @SuppressWarnings({"unchecked"})
     public static <K, V> IgnitePredicate<Cache.Entry<K, V>> cacheHasPeekValue() {
         return (IgnitePredicate<Cache.Entry<K, V>>)CACHE_ENTRY_HAS_PEEK_VAL;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridMetadataAwareAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridMetadataAwareAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridMetadataAwareAdapter.java
index d00fd10..9ad05b57 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridMetadataAwareAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridMetadataAwareAdapter.java
@@ -107,7 +107,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Type of the value.
      * @return Metadata previously associated with given name, or {@code null} if there was none.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <V> V addMeta(int key, V val) {
         assert val != null;
 
@@ -132,7 +131,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Type of the value.
      * @return Metadata value or {@code null}.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <V> V meta(int key) {
         synchronized (this) {
             return data != null && data.length > key ? (V)data[key] : null;
@@ -146,7 +144,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Type of the value.
      * @return Value of removed metadata or {@code null}.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <V> V removeMeta(int key) {
         synchronized (this) {
             if (data == null || data.length <= key)
@@ -168,7 +165,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Value type.
      * @return {@code True} if value was removed, {@code false} otherwise.
      */
-    @SuppressWarnings({"unchecked"})
     public <V> boolean removeMeta(int key, V val) {
         assert val != null;
 
@@ -243,7 +239,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Type of the value.
      * @return {@code null} if new value was put, or current value if put didn't happen.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <V> V putMetaIfAbsent(int key, V val) {
         assert val != null;
 
@@ -266,7 +261,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Type of the value.
      * @return The value of the metadata after execution of this method.
      */
-    @SuppressWarnings({"unchecked"})
     public <V> V addMetaIfAbsent(int key, V val) {
         assert val != null;
 
@@ -291,7 +285,6 @@ public class GridMetadataAwareAdapter {
      * @param <V> Type of the value.
      * @return The value of the metadata after execution of this method.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public <V> V addMetaIfAbsent(int key, @Nullable Callable<V> c) {
         assert c != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple.java
index 721d142..ae3ad01 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple.java
@@ -116,7 +116,6 @@ public class GridTuple<V> implements Iterable<V>, Cloneable, Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         val = (V)in.readObject();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple3.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple3.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple3.java
index 76fbdb5..e610bf6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple3.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple3.java
@@ -189,7 +189,6 @@ public class GridTuple3<V1, V2, V3> implements Iterable<Object>, Externalizable,
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         val1 = (V1)in.readObject();
         val2 = (V2)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple4.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple4.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple4.java
index 2889899..f5e9ec6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple4.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple4.java
@@ -218,7 +218,6 @@ public class GridTuple4<V1, V2, V3, V4> implements Iterable<Object>, Externaliza
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         val1 = (V1)in.readObject();
         val2 = (V2)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple5.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple5.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple5.java
index e1748bf..45ecbe9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple5.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple5.java
@@ -247,7 +247,6 @@ public class GridTuple5<V1, V2, V3, V4, V5> implements Iterable<Object>, Externa
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         v1 = (V1)in.readObject();
         v2 = (V2)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple6.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple6.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple6.java
index c7d7ee6..de4d1ed5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple6.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/GridTuple6.java
@@ -279,7 +279,6 @@ public class GridTuple6<V1, V2, V3, V4, V5, V6> implements Iterable<Object>, Ext
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         v1 = (V1)in.readObject();
         v2 = (V2)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
index 01e6d8a..355e06a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/PredicateMapView.java
@@ -70,12 +70,10 @@ public class PredicateMapView<K, V> extends GridSerializableMap<K, V> {
                 return F.size(map.keySet(), preds);
             }
 
-            @SuppressWarnings({"unchecked"})
             @Override public boolean remove(Object o) {
                 return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().remove(o);
             }
 
-            @SuppressWarnings({"unchecked"})
             @Override public boolean contains(Object o) {
                 return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().contains(o);
             }
@@ -92,7 +90,6 @@ public class PredicateMapView<K, V> extends GridSerializableMap<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Nullable @Override public V get(Object key) {
         return GridFunc.isAll((K)key, preds) ? map.get(key) : null;
     }
@@ -108,7 +105,6 @@ public class PredicateMapView<K, V> extends GridSerializableMap<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public boolean containsKey(Object key) {
         return GridFunc.isAll((K)key, preds) && map.containsKey(key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
index a089f67..b35014f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView.java
@@ -110,12 +110,10 @@ public class TransformMapView<K, V1, V> extends GridSerializableMap<K, V1> {
                 return hasPred ? F.size(map.keySet(), preds) : map.size();
             }
 
-            @SuppressWarnings({"unchecked"})
             @Override public boolean remove(Object o) {
                 throw new UnsupportedOperationException("Remove is not support for readonly map view.");
             }
 
-            @SuppressWarnings({"unchecked"})
             @Override public boolean contains(Object o) {
                 return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().contains(o);
             }
@@ -132,7 +130,6 @@ public class TransformMapView<K, V1, V> extends GridSerializableMap<K, V1> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Nullable @Override public V1 get(Object key) {
         if (GridFunc.isAll((K)key, preds)) {
             V v = map.get(key);
@@ -155,7 +152,6 @@ public class TransformMapView<K, V1, V> extends GridSerializableMap<K, V1> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public boolean containsKey(Object key) {
         return GridFunc.isAll((K)key, preds) && map.containsKey(key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
index 523d4cc..9361e55 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/lang/gridfunc/TransformMapView2.java
@@ -108,12 +108,10 @@ public class TransformMapView2<K, V, V1> extends GridSerializableMap<K, V1> {
                 return F.size(map.keySet(), preds);
             }
 
-            @SuppressWarnings({"unchecked"})
             @Override public boolean remove(Object o) {
                 throw new UnsupportedOperationException("Remove is not support for readonly map view.");
             }
 
-            @SuppressWarnings({"unchecked"})
             @Override public boolean contains(Object o) {
                 return F.isAll((Entry<K, V>)o, entryPred) && map.entrySet().contains(o);
             }
@@ -130,7 +128,6 @@ public class TransformMapView2<K, V, V1> extends GridSerializableMap<K, V1> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Nullable @Override public V1 get(Object key) {
         if (GridFunc.isAll((K)key, preds)) {
             V v = map.get(key);
@@ -153,7 +150,6 @@ public class TransformMapView2<K, V, V1> extends GridSerializableMap<K, V1> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public boolean containsKey(Object key) {
         return GridFunc.isAll((K)key, preds) && map.containsKey(key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
index b3c4fc1..7e3221e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/nio/GridNioServer.java
@@ -743,7 +743,6 @@ public class GridNioServer<T> {
     /**
      * @return Future.
      */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     public IgniteInternalFuture<String> dumpStats() {
         String msg = "NIO server statistics [readerSesBalanceCnt=" + readerMoveCnt.get() +
             ", writerSesBalanceCnt=" + writerMoveCnt.get() + ']';
@@ -1335,7 +1334,6 @@ public class GridNioServer<T> {
          * @param key Key that is ready to be written.
          * @throws IOException If write failed.
          */
-        @SuppressWarnings("ForLoopReplaceableByForEach")
         private void processWriteSsl(SelectionKey key) throws IOException {
             WritableByteChannel sockCh = (WritableByteChannel)key.channel();
 
@@ -1572,7 +1570,6 @@ public class GridNioServer<T> {
          * @param key Key that is ready to be written.
          * @throws IOException If write failed.
          */
-        @SuppressWarnings("ForLoopReplaceableByForEach")
         private void processWrite0(SelectionKey key) throws IOException {
             WritableByteChannel sockCh = (WritableByteChannel)key.channel();
 
@@ -1711,7 +1708,6 @@ public class GridNioServer<T> {
      * @param ses Session.
      * @param msg Message.
      */
-    @SuppressWarnings("unchecked")
     private void onMessageWritten(GridSelectorNioSessionImpl ses, Message msg) {
         if (lsnr != null)
             lsnr.onMessageSent(ses, (T)msg);
@@ -2750,7 +2746,6 @@ public class GridNioServer<T> {
          * @param key Key.
          * @throws IOException If failed.
          */
-        @SuppressWarnings("unchecked")
         private void processConnect(SelectionKey key) throws IOException {
             SocketChannel ch = (SocketChannel)key.channel();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java b/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
index be69b24..59371e3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
@@ -291,7 +291,6 @@ public final class X {
      * @param <T> Type of cloning object.
      * @return Copy of a passed in object.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <T> T cloneObject(@Nullable T obj, boolean deep, boolean honorCloneable) {
         if (obj == null)
             return null;
@@ -310,7 +309,6 @@ public final class X {
      * @param <T> Type of cloning object.
      * @return Copy of a passed in object.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable private static <T> T shallowClone(@Nullable T obj) {
         if (obj == null)
             return null;
@@ -524,7 +522,6 @@ public final class X {
      * @param cls Cause class to get cause (if {@code null}, {@code null} is returned).
      * @return First causing exception of passed in class, {@code null} otherwise.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public static <T extends Throwable> T cause(@Nullable Throwable t, @Nullable Class<T> cls) {
         if (t == null || cls == null)
             return null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/lang/IgniteBiTuple.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/lang/IgniteBiTuple.java b/modules/core/src/main/java/org/apache/ignite/lang/IgniteBiTuple.java
index 2b79e37..2918199 100644
--- a/modules/core/src/main/java/org/apache/ignite/lang/IgniteBiTuple.java
+++ b/modules/core/src/main/java/org/apache/ignite/lang/IgniteBiTuple.java
@@ -272,7 +272,6 @@ public class IgniteBiTuple<V1, V2> implements Map<V1, V2>, Map.Entry<V1, V2>,
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         val1 = (V1)in.readObject();
         val2 = (V2)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
index cbbf849..ce70413 100644
--- a/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
+++ b/modules/core/src/main/java/org/apache/ignite/logger/java/JavaLogger.java
@@ -405,7 +405,6 @@ public class JavaLogger implements IgniteLogger, LoggerNodeIdAware {
      * @param <T> Class type.
      * @return First found handler of specified class type or {@code null} if that handler isn't configured.
      */
-    @SuppressWarnings("unchecked")
     private static <T> T findHandler(Logger log, Class<T> cls) {
         while (log != null) {
             for (Handler hnd : log.getHandlers()) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
index ae4033b..742925d 100644
--- a/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/marshaller/jdk/JdkMarshaller.java
@@ -124,7 +124,6 @@ public class JdkMarshaller extends AbstractNodeNameAwareMarshaller {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override protected <T> T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
         assert in != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
index e094151..7cb153e 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ClientImpl.java
@@ -541,7 +541,6 @@ class ClientImpl extends TcpDiscoveryImpl {
      * @throws IgniteSpiException If failed.
      * @see TcpDiscoverySpi#joinTimeout
      */
-    @SuppressWarnings("BusyWait")
     @Nullable private T2<SocketStream, Boolean> joinTopology(
         InetSocketAddress prevAddr,
         long timeout,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
index 27df937..a16e440 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ServerImpl.java
@@ -2624,7 +2624,6 @@ class ServerImpl extends TcpDiscoveryImpl {
      */
     private class RingMessageWorker extends MessageWorker<TcpDiscoveryAbstractMessage> {
         /** Next node. */
-        @SuppressWarnings({"FieldAccessedSynchronizedAndUnsynchronized"})
         private TcpDiscoveryNode next;
 
         /** Pending messages. */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index c48fa11..bee7a84 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -1174,7 +1174,6 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements IgniteDiscovery
      * @return {@link LinkedHashSet} of internal and external addresses of provided node.
      *      Internal addresses placed before external addresses.
      */
-    @SuppressWarnings("TypeMayBeWeakened")
     LinkedHashSet<InetSocketAddress> getNodeAddresses(TcpDiscoveryNode node) {
         LinkedHashSet<InetSocketAddress> res = new LinkedHashSet<>(node.socketAddresses());
 
@@ -1193,7 +1192,6 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements IgniteDiscovery
      *      Internal addresses placed before external addresses.
      *      Internal addresses will be sorted with {@code inetAddressesComparator(sameHost)}.
      */
-    @SuppressWarnings("TypeMayBeWeakened")
     LinkedHashSet<InetSocketAddress> getNodeAddresses(TcpDiscoveryNode node, boolean sameHost) {
         List<InetSocketAddress> addrs = U.arrayList(node.socketAddresses());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
index 763a678..0daf68f 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/internal/TcpDiscoveryNode.java
@@ -240,7 +240,6 @@ public class TcpDiscoveryNode extends GridMetadataAwareAdapter implements Ignite
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T attribute(String name) {
         // Even though discovery SPI removes this attribute after authentication, keep this check for safety.
         if (IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS.equals(name))

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
index 6c47014..0473ab2 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/multicast/TcpDiscoveryMulticastIpFinder.java
@@ -794,7 +794,6 @@ public class TcpDiscoveryMulticastIpFinder extends TcpDiscoveryVmIpFinder {
      */
     private class AddressSender extends IgniteSpiThread {
         /** */
-        @SuppressWarnings("FieldAccessedSynchronizedAndUnsynchronized")
         private MulticastSocket sock;
 
         /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/jsr166/ConcurrentLinkedHashMap.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/jsr166/ConcurrentLinkedHashMap.java b/modules/core/src/main/java/org/jsr166/ConcurrentLinkedHashMap.java
index 5c9b4ac..6287019 100644
--- a/modules/core/src/main/java/org/jsr166/ConcurrentLinkedHashMap.java
+++ b/modules/core/src/main/java/org/jsr166/ConcurrentLinkedHashMap.java
@@ -111,7 +111,6 @@ import static org.jsr166.ConcurrentLinkedHashMap.QueuePolicy.SINGLE_Q;
  * @param <K> the type of keys maintained by this map
  * @param <V> the type of mapped values
  */
-@SuppressWarnings("NullableProblems")
 public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements ConcurrentMap<K, V> {
     /*
      * The basic strategy is to subdivide the table among Segments,
@@ -599,7 +598,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
          * @param newVal New value
          * @return {@code true} If value was replaced.
          */
-        @SuppressWarnings({"unchecked"})
         boolean replace(K key, int hash, V oldVal, V newVal) {
             writeLock().lock();
 
@@ -634,7 +632,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
          * @return {@code oldVal}, if value was replaced, non-null object if map
          *         contained some other value and {@code null} if there were no such key.
          */
-        @SuppressWarnings({"unchecked"})
         V replacex(K key, int hash, V oldVal, V newVal) {
             writeLock().lock();
 
@@ -663,7 +660,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
             return replaced;
         }
 
-        @SuppressWarnings({"unchecked"})
         V replace(K key, int hash, V newVal) {
             writeLock().lock();
 
@@ -688,7 +684,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
             return oldVal;
         }
 
-        @SuppressWarnings({"unchecked"})
         V put(K key, int hash, V val, boolean onlyIfAbsent) {
             writeLock().lock();
 
@@ -810,7 +805,7 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
         /**
          * This method is called under the segment lock.
          */
-        @SuppressWarnings({"ForLoopReplaceableByForEach", "unchecked"})
+        @SuppressWarnings({"ForLoopReplaceableByForEach"})
         void rehash() {
             HashEntry<K, V>[] oldTbl = tbl;
             int oldCap = oldTbl.length;
@@ -1093,7 +1088,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
      *      negative or the load factor or concurLvl are
      *      non-positive.
      */
-    @SuppressWarnings({"unchecked"})
     public ConcurrentLinkedHashMap(int initCap, float loadFactor, int concurLvl) {
         this(initCap, loadFactor, concurLvl, 0);
     }
@@ -1477,7 +1471,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
      *
      * @throws NullPointerException if the specified key is null
      */
-    @SuppressWarnings("NullableProblems")
     @Override public boolean remove(Object key, Object val) {
         int hash = hash(key.hashCode());
 
@@ -1489,7 +1482,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
      *
      * @throws NullPointerException if any of the arguments are null
      */
-    @SuppressWarnings("NullableProblems")
     @Override public boolean replace(K key, V oldVal, V newVal) {
         if (oldVal == null || newVal == null)
             throw new NullPointerException();
@@ -1534,7 +1526,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
      *         or <tt>null</tt> if there was no mapping for the key
      * @throws NullPointerException if the specified key or value is null
      */
-    @SuppressWarnings("NullableProblems")
     @Override public V replace(K key, V val) {
         if (val == null)
             throw new NullPointerException();
@@ -1941,7 +1932,6 @@ public class ConcurrentLinkedHashMap<K, V> extends AbstractMap<K, V> implements
          * @param e Current next.
          * @return {@code True} if advance succeeded.
          */
-        @SuppressWarnings( {"unchecked"})
         private boolean advanceInBucket(@Nullable HashEntry<K, V> e, boolean skipFirst) {
             if (e == null)
                 return false;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java b/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
index 983afde..61d0aa0 100644
--- a/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/GridTestIoUtils.java
@@ -81,7 +81,6 @@ public final class GridTestIoUtils {
      * @throws IOException If deserialization failed.
      * @throws ClassNotFoundException If deserialization failed.
      */
-    @SuppressWarnings({"unchecked"})
     public static <T extends Serializable> T deserializeJdk(byte[] bytes) throws IOException, ClassNotFoundException {
         ObjectInputStream in = null;
 
@@ -105,7 +104,6 @@ public final class GridTestIoUtils {
      * @throws IOException If deserialization failed.
      * @throws ClassNotFoundException If deserialization failed.
      */
-    @SuppressWarnings({"unchecked"})
     public static <T> T deserializeJdk(byte[] bytes, final ClassLoader clsLdr)
         throws IOException, ClassNotFoundException {
         ObjectInputStream in = null;
@@ -131,7 +129,6 @@ public final class GridTestIoUtils {
      * @return The same object, but passed through marshaller: obj->marshal->buf->unmarshal->copy.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     public static <T> T externalize(Externalizable obj, Marshaller marshaller) throws Exception {
         assert marshaller != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/GridTestJobContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/GridTestJobContext.java b/modules/core/src/test/java/org/apache/ignite/GridTestJobContext.java
index 2ad9e61..8ccf0c1 100644
--- a/modules/core/src/test/java/org/apache/ignite/GridTestJobContext.java
+++ b/modules/core/src/test/java/org/apache/ignite/GridTestJobContext.java
@@ -61,7 +61,6 @@ public class GridTestJobContext implements ComputeJobContext {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> V getAttribute(K key) {
         return (V)attrs.get(key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/GridTestTaskSession.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/GridTestTaskSession.java b/modules/core/src/test/java/org/apache/ignite/GridTestTaskSession.java
index 618cdbb..3b5f48e 100644
--- a/modules/core/src/test/java/org/apache/ignite/GridTestTaskSession.java
+++ b/modules/core/src/test/java/org/apache/ignite/GridTestTaskSession.java
@@ -153,7 +153,6 @@ public class GridTestTaskSession implements ComputeTaskSession {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> V getAttribute(K key) {
         return (V)attrs.get(key);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java b/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java
index 7dec6b2..abc6455 100644
--- a/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java
+++ b/modules/core/src/test/java/org/apache/ignite/cache/affinity/rendezvous/RendezvousAffinityFunctionSimpleBenchmark.java
@@ -1042,7 +1042,6 @@ public class RendezvousAffinityFunctionSimpleBenchmark extends GridCommonAbstrac
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
             parts = in.readInt();
             exclNeighbors = in.readBoolean();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java
index 0fb9f80..3816513 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/ClusterGroupSelfTest.java
@@ -55,7 +55,6 @@ public class ClusterGroupSelfTest extends ClusterGroupAbstractTest {
     private static Ignite ignite;
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"ConstantConditions"})
     @Override protected void beforeTestsStarted() throws Exception {
         assert NODES_CNT > 2;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/GridEventStorageRuntimeConfigurationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridEventStorageRuntimeConfigurationSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridEventStorageRuntimeConfigurationSelfTest.java
index 22f917c..816d43e 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/GridEventStorageRuntimeConfigurationSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/GridEventStorageRuntimeConfigurationSelfTest.java
@@ -53,7 +53,6 @@ public class GridEventStorageRuntimeConfigurationSelfTest extends GridCommonAbst
     private int[] inclEvtTypes;
 
     /** {@inheritDoc} */
-    @SuppressWarnings("deprecation")
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/GridMultipleVersionsDeploymentSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridMultipleVersionsDeploymentSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridMultipleVersionsDeploymentSelfTest.java
index 33bfb22..793de58 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/GridMultipleVersionsDeploymentSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/GridMultipleVersionsDeploymentSelfTest.java
@@ -104,7 +104,6 @@ public class GridMultipleVersionsDeploymentSelfTest extends GridCommonAbstractTe
     /**
      * @throws Exception If test failed.
      */
-    @SuppressWarnings("unchecked")
     @Test
     public void testMultipleVersionsLocalDeploy() throws Exception {
         try {
@@ -164,7 +163,6 @@ public class GridMultipleVersionsDeploymentSelfTest extends GridCommonAbstractTe
     /**
      * @throws Exception If test failed.
      */
-    @SuppressWarnings("unchecked")
     @Test
     public void testMultipleVersionsP2PDeploy() throws Exception {
         try {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/GridSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/GridSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/GridSelfTest.java
index 32b0e8a..2b3e625 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/GridSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/GridSelfTest.java
@@ -43,7 +43,6 @@ public class GridSelfTest extends ClusterGroupAbstractTest {
     private static final int NODES_CNT = 4;
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"ConstantConditions"})
     @Override protected void beforeTestsStarted() throws Exception {
         assert NODES_CNT > 2;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectApiExceptionTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectApiExceptionTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectApiExceptionTest.java
index e964ebb..b20d5b0 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectApiExceptionTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectApiExceptionTest.java
@@ -225,7 +225,6 @@ public class IgniteClientReconnectApiExceptionTest extends IgniteClientReconnect
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void cacheOperationsTest() throws Exception {
         clientMode = true;
 
@@ -543,7 +542,6 @@ public class IgniteClientReconnectApiExceptionTest extends IgniteClientReconnect
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void igniteOperationsTest() throws Exception {
         clientMode = true;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/IgniteExplicitImplicitDeploymentSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgniteExplicitImplicitDeploymentSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgniteExplicitImplicitDeploymentSelfTest.java
index c39e725..1144348 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/IgniteExplicitImplicitDeploymentSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgniteExplicitImplicitDeploymentSelfTest.java
@@ -125,7 +125,6 @@ public class IgniteExplicitImplicitDeploymentSelfTest extends GridCommonAbstract
      * @param byName If {@code true} than executes task by class name.
      * @throws Exception If test failed.
      */
-    @SuppressWarnings("unchecked")
     private void execExplicitDeployLocally(boolean byCls, boolean byTask, boolean byName) throws Exception {
         Ignite ignite = null;
 
@@ -191,7 +190,6 @@ public class IgniteExplicitImplicitDeploymentSelfTest extends GridCommonAbstract
      * @param byName If {@code true} than executes task by class name.
      * @throws Exception If test failed.
      */
-   @SuppressWarnings("unchecked")
    private void execImplicitDeployLocally(boolean byCls, boolean byTask, boolean byName) throws Exception {
        Ignite ignite = null;
 
@@ -270,7 +268,6 @@ public class IgniteExplicitImplicitDeploymentSelfTest extends GridCommonAbstract
      * @param byName If {@code true} than executes task by class name.
      * @throws Exception If test failed.
      */
-    @SuppressWarnings("unchecked")
     private void execExplicitDeployP2P(boolean byCls, boolean byTask, boolean byName) throws Exception {
        Ignite ignite1 = null;
        Ignite ignite2 = null;
@@ -342,7 +339,6 @@ public class IgniteExplicitImplicitDeploymentSelfTest extends GridCommonAbstract
      * @param byName If {@code true} than executes task by class name.
      * @throws Exception If test failed.
      */
-   @SuppressWarnings("unchecked")
    private void execImplicitDeployP2P(boolean byCls, boolean byTask, boolean byName) throws Exception {
       Ignite ignite1 = null;
       Ignite ignite2 = null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectTypeCompatibilityTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectTypeCompatibilityTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectTypeCompatibilityTest.java
index 423c3d1..773d94c 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectTypeCompatibilityTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryObjectTypeCompatibilityTest.java
@@ -167,7 +167,6 @@ public class BinaryObjectTypeCompatibilityTest extends GridCommonAbstractTest {
      * @param <T> Result type.
      * @return Deserialized value, if {@link BinaryObject} was provided, or the same object otherwise.
      */
-    @SuppressWarnings("unchecked")
     private <T> T deserialize(Object obj) {
         if (obj instanceof BinaryObject)
             return ((BinaryObject)obj).deserialize();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2ByteOrderSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2ByteOrderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2ByteOrderSelfTest.java
index 74e9f0f..5d5675b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2ByteOrderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/direct/stream/v2/DirectByteBufferStreamImplV2ByteOrderSelfTest.java
@@ -504,7 +504,6 @@ public class DirectByteBufferStreamImplV2ByteOrderSelfTest extends TestCase {
      * @param <T> Array type.
      * @return {@code ArrayCreator} for a required type.
      */
-    @SuppressWarnings("unchecked")
     private <T> DirectByteBufferStreamImplV2.ArrayCreator<T> arrayCreator(final T arr) {
         return new DirectByteBufferStreamImplV2.ArrayCreator<T>() {
             @Override public T create(int len) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessorAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessorAbstractSelfTest.java
index 1ce1e24..598f754 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessorAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessorAbstractSelfTest.java
@@ -91,7 +91,6 @@ public abstract class GridAffinityProcessorAbstractSelfTest extends GridCommonAb
     protected abstract AffinityFunction affinityFunction();
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"ConstantConditions"})
     @Override protected void beforeTestsStarted() throws Exception {
         assert NODES_CNT >= 1;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConcurrentReadThroughTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConcurrentReadThroughTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConcurrentReadThroughTest.java
index e26d901..1fa96b7 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConcurrentReadThroughTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheConcurrentReadThroughTest.java
@@ -62,7 +62,6 @@ public class CacheConcurrentReadThroughTest extends GridCommonAbstractTest {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(gridName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsManageTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsManageTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsManageTest.java
index 4121ceb..610ac90 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsManageTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheMetricsManageTest.java
@@ -500,7 +500,6 @@ public class CacheMetricsManageTest extends GridCommonAbstractTest {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
         IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
index e709bfd..c26589a 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractFullApiSelfTest.java
@@ -4484,7 +4484,6 @@ public abstract class GridCacheAbstractFullApiSelfTest extends GridCacheAbstract
         storeStgy.removeFromStore(key);
 
         assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicateX() {
-            @SuppressWarnings("unchecked")
             @Override public boolean applyx() {
                 try {
                     Integer val = c.get(key);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java
index 873987a..0949177 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheAbstractMetricsSelfTest.java
@@ -1029,7 +1029,6 @@ public abstract class GridCacheAbstractMetricsSelfTest extends GridCacheAbstract
         storeStgy.removeFromStore(key);
 
         assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicateX() {
-            @SuppressWarnings("unchecked")
             @Override public boolean applyx() {
                 try {
                     if (c.get(key) != null)

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentTxMultiNodeLoadTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentTxMultiNodeLoadTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentTxMultiNodeLoadTest.java
index 9f94ea8..b6e2288 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentTxMultiNodeLoadTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheConcurrentTxMultiNodeLoadTest.java
@@ -269,7 +269,7 @@ public class GridCacheConcurrentTxMultiNodeLoadTest extends GridCommonAbstractTe
      */
     private void displayReqCount() {
         new Thread(new Runnable() {
-            @SuppressWarnings({"BusyWait", "InfiniteLoopStatement"})
+            @SuppressWarnings({"BusyWait"})
             @Override public void run() {
                 int interval = 10;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java
index f3aa2c3..62eeaff 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheDeploymentSelfTest.java
@@ -237,14 +237,12 @@ public class GridCacheDeploymentSelfTest extends GridCommonAbstractTest {
     }
 
     /** @throws Exception If failed. */
-    @SuppressWarnings("unchecked")
     @Test
     public void testDeployment4() throws Exception {
         doDeployment4(false);
     }
 
     /** @throws Exception If failed. */
-    @SuppressWarnings("unchecked")
     @Test
     public void testDeployment4BackupLeavesGrid() throws Exception {
         doDeployment4(true);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
index 04a3cfa..8c42096 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheInterceptorAbstractSelfTest.java
@@ -1163,7 +1163,6 @@ public abstract class GridCacheInterceptorAbstractSelfTest extends GridCacheAbst
      * @param expOld Expected expOld value.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void update(int grid, Operation op, String key, final Integer val, @Nullable final Integer expOld)
         throws Exception {
         cacheUpdate(grid, false, op, key, val, expOld, null);
@@ -1177,7 +1176,6 @@ public abstract class GridCacheInterceptorAbstractSelfTest extends GridCacheAbst
      * @param expRmvRet Expected remove result.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void remove(int grid, Operation op, String key, @Nullable final Integer expOld,
         @Nullable final Integer expRmvRet) throws Exception {
         cacheUpdate(grid, true, op, key, null, expOld, expRmvRet);
@@ -1193,7 +1191,6 @@ public abstract class GridCacheInterceptorAbstractSelfTest extends GridCacheAbst
      * @param expRmvRet Expected remove result.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void cacheUpdate(int grid, boolean rmv, Operation op, String key, final Integer val,
         @Nullable final Integer expOld, @Nullable final Integer expRmvRet)
         throws Exception {
@@ -1277,7 +1274,6 @@ public abstract class GridCacheInterceptorAbstractSelfTest extends GridCacheAbst
      * @param map Key/values map.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void batchUpdate(int grid, Operation op, final Map<String, Integer> map) throws Exception {
         cacheBatchUpdate(grid, false, op, map);
     }
@@ -1288,7 +1284,6 @@ public abstract class GridCacheInterceptorAbstractSelfTest extends GridCacheAbst
      * @param map Key/values map.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void batchRemove(int grid, Operation op, final Map<String, Integer> map) throws Exception {
         cacheBatchUpdate(grid, true, op, map);
     }
@@ -1300,7 +1295,6 @@ public abstract class GridCacheInterceptorAbstractSelfTest extends GridCacheAbst
      * @param map Key/values map.
      * @throws Exception If failed.
      */
-    @SuppressWarnings("unchecked")
     private void cacheBatchUpdate(int grid, boolean rmv, Operation op, final Map<String, Integer> map)
         throws Exception {
         IgniteCache<String, Integer> cache = jcache(grid);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccSelfTest.java
index 1644103..fda6a4b 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheMvccSelfTest.java
@@ -1360,7 +1360,6 @@ public class GridCacheMvccSelfTest extends GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
-    @SuppressWarnings({"ObjectEquality"})
     @Test
     public void testUsedCandidates() throws Exception {
         GridCacheAdapter<String, String> cache = grid.internalCache(DEFAULT_CACHE_NAME);


[11/52] [abbrv] ignite git commit: IGNITE-10682 Ignore for licenses: Disable unnecessary loaded plugins for the Inspection test suite.

Posted by sb...@apache.org.
IGNITE-10682 Ignore for licenses: Disable unnecessary loaded plugins for the Inspection test suite.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/871126c4
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/871126c4
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/871126c4

Branch: refs/heads/ignite-627
Commit: 871126c473857b914c36f683f82266f33495821d
Parents: 389e196
Author: Dmitriy Pavlov <dp...@apache.org>
Authored: Tue Dec 18 00:59:17 2018 +0300
Committer: Dmitriy Pavlov <dp...@apache.org>
Committed: Tue Dec 18 01:00:24 2018 +0300

----------------------------------------------------------------------
 parent/pom.xml | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/871126c4/parent/pom.xml
----------------------------------------------------------------------
diff --git a/parent/pom.xml b/parent/pom.xml
index bed124f..aa8b855 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -858,6 +858,7 @@
                                         <exclude>**/keystore/ca/*serial</exclude><!--auto generated files-->
                                         <exclude>**/META-INF/services/**</exclude> <!-- Interface mappings: cannot be changed -->
                                         <!--special excludes-->
+                                        <exclude>idea/disabled_plugins.txt</exclude>
                                         <exclude>idea/ignite_codeStyle.xml</exclude>
                                         <exclude>idea/ignite_inspections.xml</exclude>
                                         <exclude>idea/ignite_inspections_teamcity.xml</exclude>


[10/52] [abbrv] ignite git commit: IGNITE-1094: Muted some tests back.

Posted by sb...@apache.org.
IGNITE-1094: Muted some tests back.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/389e1966
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/389e1966
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/389e1966

Branch: refs/heads/ignite-627
Commit: 389e196604000b84a4ce1c011ba13eec20b41c70
Parents: 5310d37
Author: devozerov <pp...@gmail.com>
Authored: Tue Dec 18 00:50:02 2018 +0300
Committer: devozerov <pp...@gmail.com>
Committed: Tue Dec 18 00:50:02 2018 +0300

----------------------------------------------------------------------
 .../processors/query/IgniteSqlSchemaIndexingTest.java       | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/389e1966/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSchemaIndexingTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSchemaIndexingTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSchemaIndexingTest.java
index 7062258..c5827a7 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSchemaIndexingTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/query/IgniteSqlSchemaIndexingTest.java
@@ -91,7 +91,9 @@ public class IgniteSqlSchemaIndexingTest extends GridCommonAbstractTest {
      */
     @Test
     public void testCaseSensitive() throws Exception {
-        //TODO rewrite with dynamic cache creation, and GRID start in #beforeTest - IGNITE-1094 resolved
+        //TODO rewrite with dynamic cache creation, and GRID start in #beforeTest after resolve of
+        //TODO IGNITE-1094
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
 
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
@@ -117,9 +119,10 @@ public class IgniteSqlSchemaIndexingTest extends GridCommonAbstractTest {
      *
      * @throws Exception If failed.
      */
-    @Test
     public void testCustomSchemaMultipleCachesTablesCollision() throws Exception {
-        //TODO: Rewrite with dynamic cache creation, and GRID start in #beforeTest - IGNITE-1094 resolved
+        //TODO: Rewrite with dynamic cache creation, and GRID start in #beforeTest after resolve of
+        //TODO: IGNITE-1094
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
 
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {


[17/52] [abbrv] ignite git commit: SqlQueryFullScanBenchmark

Posted by sb...@apache.org.
SqlQueryFullScanBenchmark


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/b4bfd4c7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/b4bfd4c7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/b4bfd4c7

Branch: refs/heads/ignite-627
Commit: b4bfd4c7cd415fa8bb7132a4a8ee58e207500767
Parents: 7c2ce4c
Author: Sergi Vladykin <se...@gmail.com>
Authored: Tue Dec 18 14:17:25 2018 +0300
Committer: Sergi Vladykin <se...@gmail.com>
Committed: Tue Dec 18 14:17:25 2018 +0300

----------------------------------------------------------------------
 .../cache/IgniteSqlQueryFullScanBenchmark.java  |  97 +++++++++
 .../yardstick/cache/model/PersonNoIndex.java    | 215 +++++++++++++++++++
 2 files changed, 312 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b4bfd4c7/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteSqlQueryFullScanBenchmark.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteSqlQueryFullScanBenchmark.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteSqlQueryFullScanBenchmark.java
new file mode 100644
index 0000000..d7cf0a9
--- /dev/null
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/IgniteSqlQueryFullScanBenchmark.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.yardstick.cache;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.concurrent.ThreadLocalRandom;
+import javax.cache.Cache;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteDataStreamer;
+import org.apache.ignite.cache.query.SqlQuery;
+import org.apache.ignite.yardstick.cache.model.PersonNoIndex;
+import org.yardstickframework.BenchmarkConfiguration;
+
+import static org.yardstickframework.BenchmarkUtils.println;
+
+/**
+ * Ignite benchmark that performs query operations.
+ */
+public class IgniteSqlQueryFullScanBenchmark extends IgniteCacheAbstractBenchmark<Integer, Object> {
+    /** {@inheritDoc} */
+    @Override public void setUp(BenchmarkConfiguration cfg) throws Exception {
+        super.setUp(cfg);
+
+        loadCachesData();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void loadCacheData(String cacheName) {
+        try (IgniteDataStreamer<Integer, PersonNoIndex> dataLdr = ignite().dataStreamer(cacheName)) {
+            for (int i = 0; i < args.range(); i++) {
+                if (i % 100 == 0 && Thread.currentThread().isInterrupted())
+                    break;
+
+                dataLdr.addData(i, new PersonNoIndex(i, "firstName" + i, "lastName" + i, i * 1000));
+
+                if (i % 100000 == 0)
+                    println(cfg, "Populated persons: " + i);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean test(Map<Object, Object> ctx) throws Exception {
+        double salary = ThreadLocalRandom.current().nextDouble() * args.range() * 1000;
+
+        double maxSalary = salary + 1000;
+
+        Collection<Cache.Entry<Integer, Object>> entries = executeQuery(salary, maxSalary);
+
+        for (Cache.Entry<Integer, Object> entry : entries) {
+            PersonNoIndex p = (PersonNoIndex)entry.getValue();
+
+            if (p.getSalary() < salary || p.getSalary() > maxSalary)
+                throw new Exception("Invalid person retrieved [min=" + salary + ", max=" + maxSalary +
+                        ", person=" + p + ']');
+        }
+
+        return true;
+    }
+
+    /**
+     * @param minSalary Min salary.
+     * @param maxSalary Max salary.
+     * @return Query result.
+     * @throws Exception If failed.
+     */
+    private Collection<Cache.Entry<Integer, Object>> executeQuery(double minSalary, double maxSalary) throws Exception {
+        IgniteCache<Integer, Object> cache = cacheForOperation(true);
+
+        SqlQuery qry = new SqlQuery(PersonNoIndex.class, "salary >= ? and salary <= ?");
+
+        qry.setArgs(minSalary, maxSalary);
+
+        return cache.query(qry).getAll();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteCache<Integer, Object> cache() {
+        return ignite().cache("query");
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/b4bfd4c7/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/PersonNoIndex.java
----------------------------------------------------------------------
diff --git a/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/PersonNoIndex.java b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/PersonNoIndex.java
new file mode 100644
index 0000000..39ef2f3
--- /dev/null
+++ b/modules/yardstick/src/main/java/org/apache/ignite/yardstick/cache/model/PersonNoIndex.java
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.yardstick.cache.model;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import org.apache.ignite.binary.BinaryObjectException;
+import org.apache.ignite.binary.BinaryReader;
+import org.apache.ignite.binary.BinaryWriter;
+import org.apache.ignite.binary.Binarylizable;
+import org.apache.ignite.cache.query.annotations.QuerySqlField;
+
+/**
+ * Person record used for query test.
+ */
+public class PersonNoIndex implements Externalizable, Binarylizable {
+    /** Person ID. */
+    @QuerySqlField
+    private int id;
+
+    /** Organization ID. */
+    @QuerySqlField
+    private int orgId;
+
+    /** First name (not-indexed). */
+    @QuerySqlField
+    private String firstName;
+
+    /** Last name (not indexed). */
+    @QuerySqlField
+    private String lastName;
+
+    /** Salary. */
+    @QuerySqlField
+    private double salary;
+
+    /**
+     * Constructs empty person.
+     */
+    public PersonNoIndex() {
+        // No-op.
+    }
+
+    /**
+     * Constructs person record that is not linked to any organization.
+     *
+     * @param id Person ID.
+     * @param firstName First name.
+     * @param lastName Last name.
+     * @param salary Salary.
+     */
+    public PersonNoIndex(int id, String firstName, String lastName, double salary) {
+        this(id, 0, firstName, lastName, salary);
+    }
+
+    /**
+     * Constructs person record.
+     *
+     * @param id Person ID.
+     * @param orgId Organization ID.
+     * @param firstName First name.
+     * @param lastName Last name.
+     * @param salary Salary.
+     */
+    public PersonNoIndex(int id, int orgId, String firstName, String lastName, double salary) {
+        this.id = id;
+        this.orgId = orgId;
+        this.firstName = firstName;
+        this.lastName = lastName;
+        this.salary = salary;
+    }
+
+    /**
+     * @return Person id.
+     */
+    public int getId() {
+        return id;
+    }
+
+    /**
+     * @param id Person id.
+     */
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    /**
+     * @return Organization id.
+     */
+    public int getOrganizationId() {
+        return orgId;
+    }
+
+    /**
+     * @param orgId Organization id.
+     */
+    public void setOrganizationId(int orgId) {
+        this.orgId = orgId;
+    }
+
+    /**
+     * @return Person first name.
+     */
+    public String getFirstName() {
+        return firstName;
+    }
+
+    /**
+     * @param firstName Person first name.
+     */
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    /**
+     * @return Person last name.
+     */
+    public String getLastName() {
+        return lastName;
+    }
+
+    /**
+     * @param lastName Person last name.
+     */
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+    /**
+     * @return Salary.
+     */
+    public double getSalary() {
+        return salary;
+    }
+
+    /**
+     * @param salary Salary.
+     */
+    public void setSalary(double salary) {
+        this.salary = salary;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeInt(id);
+        out.writeInt(orgId);
+        out.writeUTF(firstName);
+        out.writeUTF(lastName);
+        out.writeDouble(salary);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        id = in.readInt();
+        orgId = in.readInt();
+        firstName = in.readUTF();
+        lastName = in.readUTF();
+        salary = in.readDouble();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeBinary(BinaryWriter writer) throws BinaryObjectException {
+        writer.writeInt("id", id);
+        writer.writeInt("orgId", orgId);
+        writer.writeString("firstName", firstName);
+        writer.writeString("lastName", lastName);
+        writer.writeDouble("salary", salary);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readBinary(BinaryReader reader) throws BinaryObjectException {
+        id = reader.readInt("id");
+        orgId = reader.readInt("orgId");
+        firstName = reader.readString("firstName");
+        lastName = reader.readString("lastName");
+        salary = reader.readDouble("salary");
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object o) {
+        return this == o || (o instanceof PersonNoIndex) && id == ((PersonNoIndex)o).id;
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        return id;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return "Person [firstName=" + firstName +
+            ", id=" + id +
+            ", orgId=" + orgId +
+            ", lastName=" + lastName +
+            ", salary=" + salary +
+            ']';
+    }
+}
\ No newline at end of file


[06/52] [abbrv] ignite git commit: IGNITE-10488 ClusterCachesInfo.validateCacheGroupConfiguration should check cache compression configuration

Posted by sb...@apache.org.
IGNITE-10488 ClusterCachesInfo.validateCacheGroupConfiguration should check cache compression configuration


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5fb803a2
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5fb803a2
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5fb803a2

Branch: refs/heads/ignite-627
Commit: 5fb803a2c92f0f0844e88acbcb81f508873bd7f7
Parents: 83abf89
Author: Sergi Vladykin <se...@gmail.com>
Authored: Mon Dec 17 16:15:04 2018 +0300
Committer: Sergi Vladykin <se...@gmail.com>
Committed: Mon Dec 17 16:15:04 2018 +0300

----------------------------------------------------------------------
 .../compress/CompressionConfigurationTest.java  | 109 +++++++++++++++++++
 .../IgnitePdsCompressionTestSuite.java          |   2 +
 .../processors/cache/ClusterCachesInfo.java     |   8 ++
 3 files changed, 119 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5fb803a2/modules/compress/src/test/java/org/apache/ignite/internal/processors/compress/CompressionConfigurationTest.java
----------------------------------------------------------------------
diff --git a/modules/compress/src/test/java/org/apache/ignite/internal/processors/compress/CompressionConfigurationTest.java b/modules/compress/src/test/java/org/apache/ignite/internal/processors/compress/CompressionConfigurationTest.java
new file mode 100644
index 0000000..c2d86fa
--- /dev/null
+++ b/modules/compress/src/test/java/org/apache/ignite/internal/processors/compress/CompressionConfigurationTest.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.compress;
+
+import java.util.Objects;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.DiskPageCompression;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.util.typedef.X;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import static org.apache.ignite.configuration.DiskPageCompression.LZ4;
+import static org.apache.ignite.configuration.DiskPageCompression.ZSTD;
+
+/**
+ */
+@RunWith(JUnit4.class)
+public class CompressionConfigurationTest extends GridCommonAbstractTest {
+    /** */
+    DiskPageCompression compression1;
+
+    /** */
+    DiskPageCompression compression2;
+
+    /** */
+    Integer level1;
+
+    /** */
+    Integer level2;
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String instanceName) throws Exception {
+        CacheConfiguration<Object,Object> ccfg1 = new CacheConfiguration<>("cache1");
+
+        ccfg1.setDiskPageCompression(compression1);
+        ccfg1.setDiskPageCompressionLevel(level1);
+        ccfg1.setGroupName("myGroup");
+
+        CacheConfiguration<Object,Object> ccfg2 = new CacheConfiguration<>("cache2");
+
+        ccfg2.setDiskPageCompression(compression2);
+        ccfg2.setDiskPageCompressionLevel(level2);
+        ccfg2.setGroupName("myGroup");
+
+        return super.getConfiguration(instanceName).setCacheConfiguration(ccfg1, ccfg2);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testInconsistentCacheGroupCompressionConfig() throws Exception {
+        doTestConfig(ZSTD, null, null, null);
+        doTestConfig(ZSTD, 1, LZ4, 1);
+        doTestConfig(ZSTD, null, LZ4, null);
+
+        doTestConfig(null, null, null, 2);
+        doTestConfig(ZSTD, null, ZSTD, 2);
+        doTestConfig(ZSTD, 1, ZSTD, 2);
+    }
+
+    /**
+     */
+    private void doTestConfig(
+        DiskPageCompression compression1,
+        Integer level1,
+        DiskPageCompression compression2,
+        Integer level2
+    ) throws Exception {
+        this.compression1 = compression1;
+        this.level1 = level1;
+
+        this.compression2 = compression2;
+        this.level2 = level2;
+
+        try {
+            startGrid();
+
+            fail("Exception expected.");
+        }
+        catch (IgniteCheckedException e) {
+            if (compression1 != compression2)
+                assertTrue(e.getCause().getMessage().startsWith("Disk page compression mismatch"));
+            else if (!Objects.equals(level1, level2))
+                assertTrue(e.getCause().getMessage().startsWith("Disk page compression level mismatch"));
+            else
+                fail(X.getFullStackTrace(e));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/5fb803a2/modules/compress/src/test/java/org/apache/ignite/testsuites/IgnitePdsCompressionTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/compress/src/test/java/org/apache/ignite/testsuites/IgnitePdsCompressionTestSuite.java b/modules/compress/src/test/java/org/apache/ignite/testsuites/IgnitePdsCompressionTestSuite.java
index a24144d..696c614 100644
--- a/modules/compress/src/test/java/org/apache/ignite/testsuites/IgnitePdsCompressionTestSuite.java
+++ b/modules/compress/src/test/java/org/apache/ignite/testsuites/IgnitePdsCompressionTestSuite.java
@@ -19,6 +19,7 @@ package org.apache.ignite.testsuites;
 
 import junit.framework.JUnit4TestAdapter;
 import junit.framework.TestSuite;
+import org.apache.ignite.internal.processors.compress.CompressionConfigurationTest;
 import org.apache.ignite.internal.processors.compress.CompressionProcessorTest;
 import org.apache.ignite.internal.processors.compress.DiskPageCompressionIntegrationAsyncTest;
 import org.apache.ignite.internal.processors.compress.DiskPageCompressionIntegrationTest;
@@ -37,6 +38,7 @@ public class IgnitePdsCompressionTestSuite {
     public static TestSuite suite() {
         TestSuite suite = new TestSuite("Ignite Persistent Store Test Suite (with page compression).");
 
+        suite.addTest(new JUnit4TestAdapter(CompressionConfigurationTest.class));
         suite.addTest(new JUnit4TestAdapter(CompressionProcessorTest.class));
         suite.addTest(new JUnit4TestAdapter(FileSystemUtilsTest.class));
         suite.addTest(new JUnit4TestAdapter(DiskPageCompressionIntegrationTest.class));

http://git-wip-us.apache.org/repos/asf/ignite/blob/5fb803a2/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
index b85c8df..b97d12f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
@@ -1928,6 +1928,14 @@ class ClusterCachesInfo {
 
         CU.validateCacheGroupsAttributesMismatch(log, cfg, startCfg, "encryptionEnabled", "Encrypted",
             cfg.isEncryptionEnabled(), startCfg.isEncryptionEnabled(), true);
+
+        CU.validateCacheGroupsAttributesMismatch(log, cfg, startCfg,
+            "diskPageCompression", "Disk page compression",
+            cfg.getDiskPageCompression(), startCfg.getDiskPageCompression(), true);
+
+        CU.validateCacheGroupsAttributesMismatch(log, cfg, startCfg,
+            "diskPageCompressionLevel", "Disk page compression level",
+            cfg.getDiskPageCompressionLevel(), startCfg.getDiskPageCompressionLevel(), true);
     }
 
     /**


[27/52] [abbrv] ignite git commit: IGNITE-10289: [ML] Import models from XGBoost

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/datasets/agaricus-test-data.txt
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/datasets/agaricus-test-data.txt b/examples/src/main/resources/datasets/agaricus-test-data.txt
new file mode 100644
index 0000000..a5be7ab
--- /dev/null
+++ b/examples/src/main/resources/datasets/agaricus-test-data.txt
@@ -0,0 +1,1611 @@
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 4:1 10:1 19:1 21:1 23:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 10:1 19:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 3:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 3:1 7:1 20:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 4:1 10:1 19:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 4:1 7:1 20:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 7:1 19:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 123:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 7:1 20:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 3:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 6:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 6:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 123:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 4:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 123:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 4:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 19:1 21:1 23:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 123:1
+0 4:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 4:1 10:1 20:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 10:1 20:1 21:1 24:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 123:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 19:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 37:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 37:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 22:1 25:1 34:1 36:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 36:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 16:1 22:1 25:1 34:1 37:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 16:1 22:1 25:1 34:1 36:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+1 3:1 7:1 16:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 75:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 75:1 79:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 71:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+1 4:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 4:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 9:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+1 3:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 10

<TRUNCATED>

[48/52] [abbrv] ignite git commit: IGNITE-9893 IGNITE-1757 IGNITE-10723 Adding hibernate-5.3 module

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteQueryResultsRegion.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteQueryResultsRegion.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteQueryResultsRegion.java
new file mode 100644
index 0000000..2ce25f3
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteQueryResultsRegion.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.spi.QueryResultsRegion;
+import org.hibernate.query.Query;
+
+/**
+ * Implementation of {@link QueryResultsRegion}. This region is used to store query results.
+ * <p>
+ * Query results caching can be enabled in the Hibernate configuration file:
+ * <pre name="code" class="xml">
+ * &lt;hibernate-configuration&gt;
+ *     &lt;!-- Enable L2 cache. --&gt;
+ *     &lt;property name="cache.use_second_level_cache"&gt;true&lt;/property&gt;
+ *
+ *     &lt;!-- Enable query cache. --&gt;
+ *     &lt;property name="cache.use_second_level_cache"&gt;true&lt;/property&gt;
+
+ *     &lt;!-- Use Ignite as L2 cache provider. --&gt;
+ *     &lt;property name="cache.region.factory_class"&gt;org.apache.ignite.cache.hibernate.HibernateRegionFactory&lt;/property&gt;
+ *
+ *     &lt;!-- Specify entity. --&gt;
+ *     &lt;mapping class="com.example.Entity"/&gt;
+ *
+ *     &lt;!-- Enable L2 cache with nonstrict-read-write access strategy for entity. --&gt;
+ *     &lt;class-cache class="com.example.Entity" usage="nonstrict-read-write"/&gt;
+ * &lt;/hibernate-configuration&gt;
+ * </pre>
+ * By default queries are not cached even after enabling query caching, to enable results caching for a particular
+ * query, call {@link Query#setCacheable(boolean)}:
+ * <pre name="code" class="java">
+ *     Session ses = getSession();
+ *
+ *     Query qry = ses.createQuery("...");
+ *
+ *     qry.setCacheable(true); // Enable L2 cache for query.
+ * </pre>
+ * Note: the query cache does not cache the state of the actual entities in the cache, it caches only identifier
+ * values. For this reason, the query cache should always be used in conjunction with
+ * the second-level cache for those entities expected to be cached as part of a query result cache
+ */
+public class IgniteQueryResultsRegion extends IgniteGeneralDataRegion implements QueryResultsRegion {
+    /**
+     * @param factory Region factory.
+     * @param name Region name.
+     * @param ignite Grid.
+     * @param cache Region cache.
+     */
+    public IgniteQueryResultsRegion(HibernateRegionFactory factory, String name,
+        Ignite ignite, HibernateCacheProxy cache) {
+        super(factory, name, ignite, cache);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteTimestampsRegion.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteTimestampsRegion.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteTimestampsRegion.java
new file mode 100644
index 0000000..3524f35
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteTimestampsRegion.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.TimestampsRegion;
+
+/**
+ * Implementation of {@link TimestampsRegion}. This region is automatically created when query
+ * caching is enabled and it holds most recent updates timestamps to queryable tables.
+ * Name of timestamps region is {@link RegionFactory#DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME}.
+ */
+public class IgniteTimestampsRegion extends IgniteGeneralDataRegion implements TimestampsRegion {
+    /**
+     * @param factory Region factory.
+     * @param regionName Region name.
+     * @param cache Region cache.
+     */
+    public IgniteTimestampsRegion(RegionFactory factory, String regionName, Ignite ignite, HibernateCacheProxy cache) {
+        super(factory, regionName, ignite, cache);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/package-info.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/package-info.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/package-info.java
new file mode 100644
index 0000000..1179aec
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/package-info.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Contains implementation of Hibernate L2 cache. Refer to
+ * <i>org.apache.ignite.examples.datagrid.hibernate.HibernateL2CacheExample</i> for more information on how to
+ * configure and use Ignite with Hibernate.
+ */
+package org.apache.ignite.cache.hibernate;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
new file mode 100644
index 0000000..619eabf
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
@@ -0,0 +1,545 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+import javax.cache.integration.CacheLoaderException;
+import javax.cache.integration.CacheWriterException;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.cache.store.CacheStoreAdapter;
+import org.apache.ignite.cache.store.CacheStoreSession;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.IgniteInterruptedCheckedException;
+import org.apache.ignite.internal.util.tostring.GridToStringExclude;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.jdk.JdkMarshaller;
+import org.apache.ignite.resources.CacheStoreSessionResource;
+import org.apache.ignite.resources.IgniteInstanceResource;
+import org.apache.ignite.resources.LoggerResource;
+import org.apache.ignite.transactions.Transaction;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.SharedSessionContract;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.resource.transaction.spi.TransactionStatus;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * {@link CacheStore} implementation backed by Hibernate. This implementation
+ * stores objects in underlying database in {@code BLOB} format.
+ * <h2 class="header">Configuration</h2>
+ * Either {@link #setSessionFactory(SessionFactory)} or
+ * {@link #setHibernateConfigurationPath(String)} or
+ * {@link #setHibernateProperties(Properties)} should be set.
+ * <p>
+ * If session factory is provided it should contain
+ * {@link CacheHibernateBlobStoreEntry} persistent class (via provided
+ * mapping file {@code GridCacheHibernateStoreEntry.hbm.xml} or by
+ * adding {@link CacheHibernateBlobStoreEntry} to annotated classes
+ * of session factory.
+ * <p>
+ * Path to hibernate configuration may be either an URL or a file path or
+ * a classpath resource. This configuration file should include provided
+ * mapping {@code GridCacheHibernateStoreEntry.hbm.xml} or include annotated
+ * class {@link CacheHibernateBlobStoreEntry}.
+ * <p>
+ * If hibernate properties are provided, mapping
+ * {@code GridCacheHibernateStoreEntry.hbm.xml} is included automatically.
+ * <p>
+ * Use {@link CacheHibernateBlobStoreFactory} factory to pass {@link CacheHibernateBlobStore} to {@link CacheConfiguration}.
+ */
+public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
+    /**
+     * Default connection URL
+     * (value is <tt>jdbc:h2:mem:hibernateCacheStore;DB_CLOSE_DELAY=-1;DEFAULT_LOCK_TIMEOUT=5000</tt>).
+     */
+    public static final String DFLT_CONN_URL = "jdbc:h2:mem:hibernateCacheStore;DB_CLOSE_DELAY=-1;" +
+        "DEFAULT_LOCK_TIMEOUT=5000";
+
+    /** Default show SQL property value (value is <tt>true</tt>). */
+    public static final String DFLT_SHOW_SQL = "true";
+
+    /** Default <tt>hibernate.hbm2ddl.auto</tt> property value (value is <tt>true</tt>). */
+    public static final String DFLT_HBM2DDL_AUTO = "update";
+
+    /** Default <tt>hibernate.connection.pool_size</tt> property value (value is <tt>64</tt>). */
+    public static final String DFLT_CONN_POOL_SIZE = "64";
+
+    /** Session attribute name. */
+    private static final String ATTR_SES = "HIBERNATE_STORE_SESSION";
+
+    /** Name of Hibarname mapping resource. */
+    private static final String MAPPING_RESOURCE =
+            "org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml";
+
+    /** Marshaller. */
+    private static final Marshaller marsh = new JdkMarshaller();
+
+    /** Init guard. */
+    @GridToStringExclude
+    private final AtomicBoolean initGuard = new AtomicBoolean();
+
+    /** Init latch. */
+    @GridToStringExclude
+    private final CountDownLatch initLatch = new CountDownLatch(1);
+
+    /** Hibernate properties. */
+    @GridToStringExclude
+    private Properties hibernateProps;
+
+    /** Session factory. */
+    @GridToStringExclude
+    private SessionFactory sesFactory;
+
+    /** Path to hibernate configuration file. */
+    private String hibernateCfgPath;
+
+    /** Log. */
+    @LoggerResource
+    private IgniteLogger log;
+
+    /** Auto-injected store session. */
+    @CacheStoreSessionResource
+    private CacheStoreSession ses;
+
+    /** Ignite instance. */
+    @IgniteInstanceResource
+    private Ignite ignite;
+
+    /** {@inheritDoc} */
+    @SuppressWarnings({"unchecked", "RedundantTypeArguments"})
+    @Override public V load(K key) {
+        init();
+
+        Transaction tx = transaction();
+
+        if (log.isDebugEnabled())
+            log.debug("Store load [key=" + key + ", tx=" + tx + ']');
+
+        Session ses = session(tx);
+
+        try {
+            CacheHibernateBlobStoreEntry entry = ses.get(CacheHibernateBlobStoreEntry.class, toBytes(key));
+            if (entry == null)
+                return null;
+
+            return fromBytes(entry.getValue());
+        }
+        catch (IgniteCheckedException | HibernateException e) {
+            rollback(ses, tx);
+
+            throw new CacheLoaderException("Failed to load value from cache store with key: " + key, e);
+        }
+        finally {
+            end(ses, tx);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void write(javax.cache.Cache.Entry<? extends K, ? extends V> entry) {
+        init();
+
+        Transaction tx = transaction();
+
+        K key = entry.getKey();
+        V val = entry.getValue();
+
+        if (log.isDebugEnabled())
+            log.debug("Store put [key=" + key + ", val=" + val + ", tx=" + tx + ']');
+
+        if (val == null) {
+            delete(key);
+
+            return;
+        }
+
+        Session ses = session(tx);
+
+        try {
+            CacheHibernateBlobStoreEntry entry0 = new CacheHibernateBlobStoreEntry(toBytes(key), toBytes(val));
+
+            ses.saveOrUpdate(entry0);
+        }
+        catch (IgniteCheckedException | HibernateException e) {
+            rollback(ses, tx);
+
+            throw new CacheWriterException("Failed to put value to cache store [key=" + key + ", val" + val + "]", e);
+        }
+        finally {
+            end(ses, tx);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings({"JpaQueryApiInspection", "JpaQlInspection"})
+    @Override public void delete(Object key) {
+        init();
+
+        Transaction tx = transaction();
+
+        if (log.isDebugEnabled())
+            log.debug("Store remove [key=" + key + ", tx=" + tx + ']');
+
+        Session ses = session(tx);
+
+        try {
+            Object obj = ses.get(CacheHibernateBlobStoreEntry.class, toBytes(key));
+
+            if (obj != null)
+                ses.delete(obj);
+        }
+        catch (IgniteCheckedException | HibernateException e) {
+            rollback(ses, tx);
+
+            throw new CacheWriterException("Failed to remove value from cache store with key: " + key, e);
+        }
+        finally {
+            end(ses, tx);
+        }
+    }
+
+    /**
+     * Rolls back hibernate session.
+     *
+     * @param ses Hibernate session.
+     * @param tx Cache ongoing transaction.
+     */
+    private void rollback(SharedSessionContract ses, Transaction tx) {
+        // Rollback only if there is no cache transaction,
+        // otherwise sessionEnd() will do all required work.
+        if (tx == null) {
+            org.hibernate.Transaction hTx = ses.getTransaction();
+
+            if (hTx != null && hTx.getStatus().canRollback())
+                hTx.rollback();
+        }
+    }
+
+    /**
+     * Ends hibernate session.
+     *
+     * @param ses Hibernate session.
+     * @param tx Cache ongoing transaction.
+     */
+    private void end(Session ses, Transaction tx) {
+        // Commit only if there is no cache transaction,
+        // otherwise sessionEnd() will do all required work.
+        if (tx == null) {
+            org.hibernate.Transaction hTx = ses.getTransaction();
+
+            if (hTx != null && hTx.getStatus() == TransactionStatus.ACTIVE)
+                hTx.commit();
+
+            ses.close();
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void sessionEnd(boolean commit) {
+        init();
+
+        Transaction tx = transaction();
+
+        Map<String, Session> props = session().properties();
+
+        Session ses = props.remove(ATTR_SES);
+
+        if (ses != null) {
+            org.hibernate.Transaction hTx = ses.getTransaction();
+
+            if (hTx != null) {
+                try {
+                    if (commit) {
+                        ses.flush();
+
+                        hTx.commit();
+                    }
+                    else
+                        hTx.rollback();
+
+                    if (log.isDebugEnabled())
+                        log.debug("Transaction ended [xid=" + tx.xid() + ", commit=" + commit + ']');
+                }
+                catch (HibernateException e) {
+                    throw new CacheWriterException("Failed to end transaction [xid=" + tx.xid() +
+                        ", commit=" + commit + ']', e);
+                }
+                finally {
+                    ses.close();
+                }
+            }
+        }
+    }
+
+    /**
+     * Gets Hibernate session.
+     *
+     * @param tx Cache transaction.
+     * @return Session.
+     */
+    Session session(@Nullable Transaction tx) {
+        Session ses;
+
+        if (tx != null) {
+            Map<String, Session> props = session().properties();
+
+            ses = props.get(ATTR_SES);
+
+            if (ses == null) {
+                ses = sesFactory.openSession();
+
+                ses.beginTransaction();
+
+                // Store session in transaction metadata, so it can be accessed
+                // for other operations on the same transaction.
+                props.put(ATTR_SES, ses);
+
+                if (log.isDebugEnabled())
+                    log.debug("Hibernate session open [ses=" + ses + ", tx=" + tx.xid() + "]");
+            }
+        }
+        else {
+            ses = sesFactory.openSession();
+
+            ses.beginTransaction();
+        }
+
+        return ses;
+    }
+
+    /**
+     * Sets session factory.
+     *
+     * @param sesFactory Session factory.
+     */
+    public void setSessionFactory(SessionFactory sesFactory) {
+        this.sesFactory = sesFactory;
+    }
+
+    /**
+     * Sets hibernate configuration path.
+     * <p>
+     * This may be either URL or file path or classpath resource.
+     *
+     * @param hibernateCfgPath URL or file path or classpath resource
+     *      pointing to hibernate configuration XML file.
+     */
+    public void setHibernateConfigurationPath(String hibernateCfgPath) {
+        this.hibernateCfgPath = hibernateCfgPath;
+    }
+
+    /**
+     * Sets Hibernate properties.
+     *
+     * @param hibernateProps Hibernate properties.
+     */
+    public void setHibernateProperties(Properties hibernateProps) {
+        this.hibernateProps = hibernateProps;
+    }
+
+    /**
+     * Initializes store.
+     *
+     * @throws IgniteException If failed to initialize.
+     */
+    private void init() throws IgniteException {
+        if (initGuard.compareAndSet(false, true)) {
+            if (log.isDebugEnabled())
+                log.debug("Initializing cache store.");
+
+            try {
+                // Session factory has been provided - nothing to do.
+                if (sesFactory != null)
+                    return;
+
+                if (!F.isEmpty(hibernateCfgPath)) {
+                    try {
+                        URL url = new URL(hibernateCfgPath);
+
+                        sesFactory = new Configuration().configure(url).buildSessionFactory();
+
+                        if (log.isDebugEnabled())
+                            log.debug("Configured session factory using URL: " + url);
+
+                        // Session factory has been successfully initialized.
+                        return;
+                    }
+                    catch (MalformedURLException e) {
+                        if (log.isDebugEnabled())
+                            log.debug("Caught malformed URL exception: " + e.getMessage());
+                    }
+
+                    // Provided path is not a valid URL. File?
+                    File cfgFile = new File(hibernateCfgPath);
+
+                    if (cfgFile.exists()) {
+                        sesFactory = new Configuration().configure(cfgFile).buildSessionFactory();
+
+                        if (log.isDebugEnabled())
+                            log.debug("Configured session factory using file: " + hibernateCfgPath);
+
+                        // Session factory has been successfully initialized.
+                        return;
+                    }
+
+                    // Provided path is not a file. Classpath resource?
+                    sesFactory = new Configuration().configure(hibernateCfgPath).buildSessionFactory();
+
+                    if (log.isDebugEnabled())
+                        log.debug("Configured session factory using classpath resource: " + hibernateCfgPath);
+                }
+                else {
+                    if (hibernateProps == null) {
+                        U.warn(log, "No Hibernate configuration has been provided for store (will use default).");
+
+                        hibernateProps = new Properties();
+
+                        hibernateProps.setProperty("hibernate.connection.url", DFLT_CONN_URL);
+                        hibernateProps.setProperty("hibernate.show_sql", DFLT_SHOW_SQL);
+                        hibernateProps.setProperty("hibernate.hbm2ddl.auto", DFLT_HBM2DDL_AUTO);
+                        hibernateProps.setProperty("hibernate.connection.pool_size", DFLT_CONN_POOL_SIZE);
+                    }
+
+                    Configuration cfg = new Configuration();
+
+                    cfg.setProperties(hibernateProps);
+
+                    assert resourceAvailable(MAPPING_RESOURCE) : MAPPING_RESOURCE;
+
+                    cfg.addResource(MAPPING_RESOURCE);
+
+                    sesFactory = cfg.buildSessionFactory();
+
+                    if (log.isDebugEnabled())
+                        log.debug("Configured session factory using properties: " + hibernateProps);
+                }
+            }
+            catch (HibernateException e) {
+                throw new IgniteException("Failed to initialize store.", e);
+            }
+            finally {
+                initLatch.countDown();
+            }
+        }
+        else if (initLatch.getCount() > 0) {
+            try {
+                U.await(initLatch);
+            }
+            catch (IgniteInterruptedCheckedException e) {
+                throw new IgniteException(e);
+            }
+        }
+
+        if (sesFactory == null)
+            throw new IgniteException("Cache store was not properly initialized.");
+    }
+
+    /**
+     * Checks availability of a classpath resource.
+     *
+     * @param name Resource name.
+     * @return {@code true} if resource is available and ready for read, {@code false} otherwise.
+     */
+    private boolean resourceAvailable(String name) {
+        InputStream cfgStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
+
+        if (cfgStream == null) {
+            log.error("Classpath resource not found: " + name);
+
+            return false;
+        }
+
+        try {
+            // Read a single byte to force actual content access by JVM.
+            cfgStream.read();
+
+            return true;
+        }
+        catch (IOException e) {
+            log.error("Failed to read classpath resource: " + name, e);
+
+            return false;
+        }
+        finally {
+            U.close(cfgStream, log);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(CacheHibernateBlobStore.class, this);
+    }
+
+    /**
+     * Serialize object to byte array using marshaller.
+     *
+     * @param obj Object to convert to byte array.
+     * @return Byte array.
+     * @throws IgniteCheckedException If failed to convert.
+     */
+    protected byte[] toBytes(Object obj) throws IgniteCheckedException {
+        return U.marshal(marsh, obj);
+    }
+
+    /**
+     * Deserialize object from byte array using marshaller.
+     *
+     * @param bytes Bytes to deserialize.
+     * @param <X> Result object type.
+     * @return Deserialized object.
+     * @throws IgniteCheckedException If failed.
+     */
+    protected <X> X fromBytes(byte[] bytes) throws IgniteCheckedException {
+        if (bytes == null || bytes.length == 0)
+            return null;
+
+        return U.unmarshal(marsh, bytes, getClass().getClassLoader());
+    }
+
+    /**
+     * @return Current transaction.
+     */
+    @Nullable private Transaction transaction() {
+        CacheStoreSession ses = session();
+
+        return ses != null ? ses.transaction() : null;
+    }
+
+    /**
+     * @return Store session.
+     */
+    private CacheStoreSession session() {
+        return ses;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.java
new file mode 100644
index 0000000..d40c5ef
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * Entry that is used by {@link CacheHibernateBlobStore} implementation.
+ * <p>
+ * Note that this is a reference implementation for tests only.
+ * When running on production systems use concrete key-value types to
+ * get better performance.
+ */
+@Entity
+@Table(name = "ENTRIES")
+public class CacheHibernateBlobStoreEntry {
+    /** Key (use concrete key type in production). */
+    @Id
+    @Column(length = 65535)
+    private byte[] key;
+
+    /** Value (use concrete value type in production). */
+    @Column(length = 65535)
+    private byte[] val;
+
+    /**
+     * Constructor.
+     */
+    CacheHibernateBlobStoreEntry() {
+        // No-op.
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param key Key.
+     * @param val Value.
+     */
+    CacheHibernateBlobStoreEntry(byte[] key, byte[] val) {
+        this.key = key;
+        this.val = val;
+    }
+
+    /**
+     * @return Key.
+     */
+    public byte[] getKey() {
+        return key;
+    }
+
+    /**
+     * @param key Key.
+     */
+    public void setKey(byte[] key) {
+        this.key = key;
+    }
+
+    /**
+     * @return Value.
+     */
+    public byte[] getValue() {
+        return val;
+    }
+
+    /**
+     * @param val Value.
+     */
+    public void setValue(byte[] val) {
+        this.val = val;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreFactory.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreFactory.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreFactory.java
new file mode 100644
index 0000000..7e58f29
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreFactory.java
@@ -0,0 +1,235 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import java.util.Properties;
+import javax.cache.configuration.Factory;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.internal.IgniteComponentType;
+import org.apache.ignite.internal.util.spring.IgniteSpringHelper;
+import org.apache.ignite.internal.util.tostring.GridToStringExclude;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.resources.SpringApplicationContextResource;
+import org.hibernate.SessionFactory;
+
+/**
+ * {@link Factory} implementation for {@link CacheHibernateBlobStore}.
+ *
+ * Use this factory to pass {@link CacheHibernateBlobStore} to {@link CacheConfiguration}.
+ *
+ * <h2 class="header">Java Example</h2>
+ * In this example existing session factory is provided.
+ * <pre name="code" class="java">
+ *     ...
+ *     CacheHibernateBlobStoreFactory&lt;String, String&gt; factory = new CacheHibernateBlobStoreFactory&lt;String, String&gt;();
+ *
+ *     factory.setSessionFactory(sesFactory);
+ *     ...
+ * </pre>
+ *
+ * <h2 class="header">Spring Example (using Spring ORM)</h2>
+ * <pre name="code" class="xml">
+ *   ...
+ *   &lt;bean id=&quot;cache.hibernate.store.factory&quot;
+ *       class=&quot;org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreFactory&quot;&gt;
+ *       &lt;property name=&quot;sessionFactory&quot;&gt;
+ *           &lt;bean class=&quot;org.springframework.orm.hibernate3.LocalSessionFactoryBean&quot;&gt;
+ *               &lt;property name=&quot;hibernateProperties&quot;&gt;
+ *                   &lt;value&gt;
+ *                       connection.url=jdbc:h2:mem:
+ *                       show_sql=true
+ *                       hbm2ddl.auto=true
+ *                       hibernate.dialect=org.hibernate.dialect.H2Dialect
+ *                   &lt;/value&gt;
+ *               &lt;/property&gt;
+ *               &lt;property name=&quot;mappingResources&quot;&gt;
+ *                   &lt;list&gt;
+ *                       &lt;value&gt;
+ *                           org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml
+ *                       &lt;/value&gt;
+ *                   &lt;/list&gt;
+ *               &lt;/property&gt;
+ *           &lt;/bean&gt;
+ *       &lt;/property&gt;
+ *   &lt;/bean&gt;
+ *   ...
+ * </pre>
+ *
+ * <h2 class="header">Spring Example (using Spring ORM and persistent annotations)</h2>
+ * <pre name="code" class="xml">
+ *     ...
+ *     &lt;bean id=&quot;cache.hibernate.store.factory1&quot;
+ *         class=&quot;org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreFactory&quot;&gt;
+ *         &lt;property name=&quot;sessionFactory&quot;&gt;
+ *             &lt;bean class=&quot;org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean&quot;&gt;
+ *                 &lt;property name=&quot;hibernateProperties&quot;&gt;
+ *                     &lt;value&gt;
+ *                         connection.url=jdbc:h2:mem:
+ *                         show_sql=true
+ *                         hbm2ddl.auto=true
+ *                         hibernate.dialect=org.hibernate.dialect.H2Dialect
+ *                     &lt;/value&gt;
+ *                 &lt;/property&gt;
+ *                 &lt;property name=&quot;annotatedClasses&quot;&gt;
+ *                     &lt;list&gt;
+ *                         &lt;value&gt;
+ *                             org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreEntry
+ *                         &lt;/value&gt;
+ *                     &lt;/list&gt;
+ *                 &lt;/property&gt;
+ *             &lt;/bean&gt;
+ *         &lt;/property&gt;
+ *     &lt;/bean&gt;
+ *     ...
+ * </pre>
+ *
+ * <h2 class="header">Spring Example</h2>
+ * <pre name="code" class="xml">
+ *     ...
+ *     &lt;bean id=&quot;cache.hibernate.store.factory2&quot;
+ *         class=&quot;org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreFactory&quot;&gt;
+ *         &lt;property name=&quot;hibernateProperties&quot;&gt;
+ *             &lt;props&gt;
+ *                 &lt;prop key=&quot;connection.url&quot;&gt;jdbc:h2:mem:&lt;/prop&gt;
+ *                 &lt;prop key=&quot;hbm2ddl.auto&quot;&gt;update&lt;/prop&gt;
+ *                 &lt;prop key=&quot;show_sql&quot;&gt;true&lt;/prop&gt;
+ *             &lt;/props&gt;
+ *         &lt;/property&gt;
+ *     &lt;/bean&gt;
+ *     ...
+ * </pre>
+ * <p>
+ * <img src="http://ignite.apache.org/images/spring-small.png">
+ * <br>
+ * For information about Spring framework visit <a href="http://www.springframework.org/">www.springframework.org</a>
+ */
+public class CacheHibernateBlobStoreFactory<K, V> implements Factory<CacheHibernateBlobStore<K, V>> {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Session factory. */
+    @GridToStringExclude
+    private transient SessionFactory sesFactory;
+
+    /** Session factory bean name. */
+    private String sesFactoryBean;
+
+    /** Path to hibernate configuration file. */
+    private String hibernateCfgPath;
+
+    /** Hibernate properties. */
+    @GridToStringExclude
+    private Properties hibernateProps;
+
+    /** Application context. */
+    @SpringApplicationContextResource
+    private Object appCtx;
+
+    /** {@inheritDoc} */
+    @Override public CacheHibernateBlobStore<K, V> create() {
+        CacheHibernateBlobStore<K, V> store = new CacheHibernateBlobStore<>();
+
+        store.setHibernateConfigurationPath(hibernateCfgPath);
+        store.setHibernateProperties(hibernateProps);
+
+        if (sesFactory != null)
+            store.setSessionFactory(sesFactory);
+        else if (sesFactoryBean != null) {
+            if (appCtx == null)
+                throw new IgniteException("Spring application context resource is not injected.");
+
+            IgniteSpringHelper spring;
+
+            try {
+                spring = IgniteComponentType.SPRING.create(false);
+
+                SessionFactory sesFac = spring.loadBeanFromAppContext(appCtx, sesFactoryBean);
+
+                store.setSessionFactory(sesFac);
+            }
+            catch (IgniteCheckedException e) {
+                throw new IgniteException("Failed to load bean in application context [beanName=" + sesFactoryBean +
+                        ", igniteConfig=" + appCtx + ']');
+            }
+        }
+
+        return store;
+    }
+
+    /**
+     * Sets session factory.
+     *
+     * @param sesFactory Session factory.
+     * @return {@code This} for chaining.
+     * @see CacheHibernateBlobStore#setSessionFactory(SessionFactory)
+     */
+    public CacheHibernateBlobStoreFactory<K, V> setSessionFactory(SessionFactory sesFactory) {
+        this.sesFactory = sesFactory;
+
+        return this;
+    }
+
+    /**
+     * Sets name of the data source bean.
+     *
+     * @param sesFactory Session factory bean name.
+     * @return {@code This} for chaining.
+     * @see CacheHibernateBlobStore#setSessionFactory(SessionFactory)
+     */
+    public CacheHibernateBlobStoreFactory<K, V> setSessionFactoryBean(String sesFactory) {
+        this.sesFactoryBean = sesFactory;
+
+        return this;
+    }
+
+    /**
+     * Sets hibernate configuration path.
+     * <p>
+     * This may be either URL or file path or classpath resource.
+     *
+     * @param hibernateCfgPath URL or file path or classpath resource
+     *      pointing to hibernate configuration XML file.
+     * @return {@code This} for chaining.
+     * @see CacheHibernateBlobStore#setHibernateConfigurationPath(String)
+     */
+    public CacheHibernateBlobStoreFactory<K, V> setHibernateConfigurationPath(String hibernateCfgPath) {
+        this.hibernateCfgPath = hibernateCfgPath;
+
+        return this;
+    }
+
+    /**
+     * Sets Hibernate properties.
+     *
+     * @param hibernateProps Hibernate properties.
+     * @return {@code This} for chaining.
+     * @see CacheHibernateBlobStore#setHibernateProperties(Properties)
+     */
+    public CacheHibernateBlobStoreFactory<K, V> setHibernateProperties(Properties hibernateProps) {
+        this.hibernateProps = hibernateProps;
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(CacheHibernateBlobStoreFactory.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListener.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListener.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListener.java
new file mode 100644
index 0000000..a63a437
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreSessionListener.java
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.store.hibernate;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import javax.cache.integration.CacheWriterException;
+import org.apache.ignite.IgniteException;
+import org.apache.ignite.IgniteLogger;
+import org.apache.ignite.cache.store.CacheStore;
+import org.apache.ignite.cache.store.CacheStoreSession;
+import org.apache.ignite.cache.store.CacheStoreSessionListener;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.lifecycle.LifecycleAware;
+import org.apache.ignite.resources.LoggerResource;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.resource.transaction.spi.TransactionStatus;
+
+/**
+ * Hibernate-based cache store session listener.
+ * <p>
+ * This listener creates a new Hibernate session for each store
+ * session. If there is an ongoing cache transaction, a corresponding
+ * Hibernate transaction is created as well.
+ * <p>
+ * The Hibernate session is saved as a store session
+ * {@link CacheStoreSession#attachment() attachment}.
+ * The listener guarantees that the session will be
+ * available for any store operation. If there is an
+ * ongoing cache transaction, all operations within this
+ * transaction will share a DB transaction.
+ * <p>
+ * As an example, here is how the {@link CacheStore#write(javax.cache.Cache.Entry)}
+ * method can be implemented if {@link CacheHibernateStoreSessionListener}
+ * is configured:
+ * <pre name="code" class="java">
+ * private static class Store extends CacheStoreAdapter&lt;Integer, Integer&gt; {
+ *     &#64;CacheStoreSessionResource
+ *     private CacheStoreSession ses;
+ *
+ *     &#64;Override public void write(Cache.Entry&lt;? extends Integer, ? extends Integer&gt; entry) throws CacheWriterException {
+ *         // Get Hibernate session from the current store session.
+ *         Session hibSes = ses.attachment();
+ *
+ *         // Persist the value.
+ *         hibSes.persist(entry.getValue());
+ *     }
+ * }
+ * </pre>
+ * Hibernate session will be automatically created by the listener
+ * at the start of the session and closed when it ends.
+ * <p>
+ * {@link CacheHibernateStoreSessionListener} requires that either
+ * {@link #setSessionFactory(SessionFactory)} session factory}
+ * or {@link #setHibernateConfigurationPath(String) Hibernate configuration file}
+ * is provided. If non of them is set, exception is thrown. Is both are provided,
+ * session factory will be used.
+ */
+public class CacheHibernateStoreSessionListener implements CacheStoreSessionListener, LifecycleAware {
+    /** Hibernate session factory. */
+    private SessionFactory sesFactory;
+
+    /** Hibernate configuration file path. */
+    private String hibernateCfgPath;
+
+    /** Logger. */
+    @LoggerResource
+    private IgniteLogger log;
+
+    /** Whether to close session on stop. */
+    private boolean closeSesOnStop;
+
+    /**
+     * Sets Hibernate session factory.
+     * <p>
+     * Either session factory or configuration file is required.
+     * If none is provided, exception will be thrown on startup.
+     *
+     * @param sesFactory Session factory.
+     */
+    public void setSessionFactory(SessionFactory sesFactory) {
+        this.sesFactory = sesFactory;
+    }
+
+    /**
+     * Gets Hibernate session factory.
+     *
+     * @return Session factory.
+     */
+    public SessionFactory getSessionFactory() {
+        return sesFactory;
+    }
+
+    /**
+     * Sets hibernate configuration path.
+     * <p>
+     * Either session factory or configuration file is required.
+     * If none is provided, exception will be thrown on startup.
+     *
+     * @param hibernateCfgPath Hibernate configuration path.
+     */
+    public void setHibernateConfigurationPath(String hibernateCfgPath) {
+        this.hibernateCfgPath = hibernateCfgPath;
+    }
+
+    /**
+     * Gets hibernate configuration path.
+     *
+     * @return Hibernate configuration path.
+     */
+    public String getHibernateConfigurationPath() {
+        return hibernateCfgPath;
+    }
+
+    /** {@inheritDoc} */
+    @SuppressWarnings("deprecation")
+    @Override public void start() throws IgniteException {
+        if (sesFactory == null && F.isEmpty(hibernateCfgPath)) {
+            throw new IgniteException("Either session factory or Hibernate configuration file is required by " +
+                getClass().getSimpleName() + '.');
+        }
+
+        if (!F.isEmpty(hibernateCfgPath)) {
+            if (sesFactory == null) {
+                try {
+                    URL url = new URL(hibernateCfgPath);
+
+                    sesFactory = new Configuration().configure(url).buildSessionFactory();
+                }
+                catch (MalformedURLException ex) {
+                    log.warning("Exception on store listener start", ex);
+                }
+
+                if (sesFactory == null) {
+                    File cfgFile = new File(hibernateCfgPath);
+
+                    if (cfgFile.exists())
+                        sesFactory = new Configuration().configure(cfgFile).buildSessionFactory();
+                }
+
+                if (sesFactory == null)
+                    sesFactory = new Configuration().configure(hibernateCfgPath).buildSessionFactory();
+
+                if (sesFactory == null)
+                    throw new IgniteException("Failed to resolve Hibernate configuration file: " + hibernateCfgPath);
+
+                closeSesOnStop = true;
+            }
+            else {
+                U.warn(log, "Hibernate configuration file configured in " + getClass().getSimpleName() +
+                    " will be ignored (session factory is already set).");
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void stop() throws IgniteException {
+        if (closeSesOnStop && sesFactory != null && !sesFactory.isClosed())
+            sesFactory.close();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onSessionStart(CacheStoreSession ses) {
+        if (ses.attachment() == null) {
+            try {
+                Session hibSes = sesFactory.openSession();
+
+                ses.attach(hibSes);
+
+                if (ses.isWithinTransaction())
+                    hibSes.beginTransaction();
+            }
+            catch (HibernateException e) {
+                throw new CacheWriterException("Failed to start store session [tx=" + ses.transaction() + ']', e);
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onSessionEnd(CacheStoreSession ses, boolean commit) {
+        Session hibSes = ses.attach(null);
+
+        if (hibSes != null) {
+            try {
+                Transaction tx = hibSes.getTransaction();
+
+                if (commit) {
+                    if (hibSes.isDirty())
+                        hibSes.flush();
+
+                    if (tx.getStatus() == TransactionStatus.ACTIVE)
+                        tx.commit();
+                }
+                else if (tx.getStatus().canRollback())
+                    tx.rollback();
+            }
+            catch (HibernateException e) {
+                throw new CacheWriterException("Failed to end store session [tx=" + ses.transaction() + ']', e);
+            }
+            finally {
+                hibSes.close();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/package-info.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/package-info.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/package-info.java
new file mode 100644
index 0000000..891d99a
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/store/hibernate/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Contains reference Hibernate-based cache store implementation.
+ */
+package org.apache.ignite.cache.store.hibernate;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/resources/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/resources/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml b/modules/hibernate-5.3/src/main/resources/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml
new file mode 100644
index 0000000..5b0be43
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/resources/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreEntry.hbm.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+
+<!DOCTYPE hibernate-mapping PUBLIC
+        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
+        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
+
+<hibernate-mapping package="org.apache.ignite.examples.datagrid.store" default-access="field">
+    <class name="org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreEntry" table="ENTRIES">
+        <id name="key"/>
+
+        <property name="val"/>
+    </class>
+</hibernate-mapping>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/config/factory-cache.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/config/factory-cache.xml b/modules/hibernate-5.3/src/test/config/factory-cache.xml
new file mode 100644
index 0000000..a251846
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/config/factory-cache.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <bean id="simpleSessionFactory"
+          class="org.apache.ignite.cache.store.hibernate.CacheHibernateStoreFactorySelfTest$DummySessionFactoryExt"/>
+
+    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <property name="cacheConfiguration">
+            <list>
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="name" value="test"/>
+                    <property name="atomicityMode" value="ATOMIC"/>
+                    <property name="backups" value="1"/>
+                    <property name="cacheStoreFactory">
+                        <bean class="org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreFactory">
+                            <property name="sessionFactoryBean" value = "simpleSessionFactory"/>
+                        </bean>
+                    </property>
+                </bean>
+            </list>
+        </property>
+
+        <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
+        <property name="discoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+                <property name="ipFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+                        <property name="addresses">
+                            <list>
+                                <value>127.0.0.1:47500..47509</value>
+                            </list>
+                        </property>
+                    </bean>
+                </property>
+            </bean>
+        </property>
+    </bean>
+</beans>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/config/factory-cache1.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/config/factory-cache1.xml b/modules/hibernate-5.3/src/test/config/factory-cache1.xml
new file mode 100644
index 0000000..7a53b1f
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/config/factory-cache1.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <bean id="simpleSessionFactory1"
+          class="org.apache.ignite.cache.store.hibernate.CacheHibernateStoreFactorySelfTest$DummySessionFactory"/>
+
+    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <property name="igniteInstanceName" value="ignite1"/>
+
+        <property name="cacheConfiguration">
+            <list>
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="name" value="test"/>
+                    <property name="atomicityMode" value="ATOMIC"/>
+                    <property name="backups" value="1"/>
+                    <property name="cacheStoreFactory">
+                        <bean class="org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreFactory">
+                            <property name="sessionFactoryBean" value = "simpleSessionFactory1"/>
+                        </bean>
+                    </property>
+                </bean>
+            </list>
+        </property>
+
+        <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
+        <property name="discoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+                <property name="ipFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+                        <property name="addresses">
+                            <list>
+                                <value>127.0.0.1:47500..47509</value>
+                            </list>
+                        </property>
+                    </bean>
+                </property>
+            </bean>
+        </property>
+    </bean>
+</beans>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/config/factory-incorrect-store-cache.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/config/factory-incorrect-store-cache.xml b/modules/hibernate-5.3/src/test/config/factory-incorrect-store-cache.xml
new file mode 100644
index 0000000..4de9fc9
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/config/factory-incorrect-store-cache.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <property name="failureHandler">
+            <bean class="org.apache.ignite.failure.NoOpFailureHandler"/>
+        </property>
+
+        <property name="cacheConfiguration">
+            <list>
+                <bean class="org.apache.ignite.configuration.CacheConfiguration">
+                    <property name="name" value="test"/>
+                    <property name="atomicityMode" value="ATOMIC"/>
+                    <property name="backups" value="1"/>
+                    <property name="cacheStoreFactory">
+                        <bean class="org.apache.ignite.cache.store.hibernate.CacheHibernateBlobStoreFactory">
+                            <property name="sessionFactoryBean" value = "simpleSessionFactory1"/>
+                        </bean>
+                    </property>
+                </bean>
+            </list>
+        </property>
+
+        <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
+        <property name="discoverySpi">
+            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+                <property name="ipFinder">
+                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+                        <property name="addresses">
+                            <list>
+                                <value>127.0.0.1:47500..47509</value>
+                            </list>
+                        </property>
+                    </bean>
+                </property>
+            </bean>
+        </property>
+    </bean>
+</beans>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
new file mode 100644
index 0000000..a1f8ae0
--- /dev/null
+++ b/modules/hibernate-5.3/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
@@ -0,0 +1,409 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import javax.cache.Cache;
+import javax.persistence.Cacheable;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Root;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteKernal;
+import org.apache.ignite.internal.processors.cache.IgniteCacheProxy;
+import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.hibernate.Transaction;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cfg.Configuration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
+import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.REGION_CACHE_PROPERTY;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cache.spi.RegionFactory.DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME;
+import static org.hibernate.cfg.AvailableSettings.CACHE_REGION_FACTORY;
+import static org.hibernate.cfg.AvailableSettings.GENERATE_STATISTICS;
+import static org.hibernate.cfg.AvailableSettings.HBM2DDL_AUTO;
+import static org.hibernate.cfg.AvailableSettings.RELEASE_CONNECTIONS;
+import static org.hibernate.cfg.AvailableSettings.USE_QUERY_CACHE;
+import static org.hibernate.cfg.AvailableSettings.USE_SECOND_LEVEL_CACHE;
+
+/**
+ * Tests Hibernate L2 cache configuration.
+ */
+@RunWith(JUnit4.class)
+public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTest {
+    /** */
+    public static final String ENTITY1_NAME = Entity1.class.getName();
+
+    /** */
+    public static final String ENTITY2_NAME = Entity2.class.getName();
+
+    /** */
+    public static final String ENTITY3_NAME = Entity3.class.getName();
+
+    /** */
+    public static final String ENTITY4_NAME = Entity4.class.getName();
+
+    /** */
+    public static final String CONNECTION_URL = "jdbc:h2:mem:example;DB_CLOSE_DELAY=-1";
+
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        startGrid(0);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTestsStopped() throws Exception {
+        stopAllGrids();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        for (IgniteCacheProxy<?, ?> cache : ((IgniteKernal)grid(0)).caches())
+            cache.clear();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
+
+        discoSpi.setIpFinder(new TcpDiscoveryVmIpFinder(true));
+
+        cfg.setDiscoverySpi(discoSpi);
+
+        cfg.setCacheConfiguration(cacheConfiguration(ENTITY3_NAME),
+            cacheConfiguration(ENTITY4_NAME),
+            cacheConfiguration("cache1"),
+            cacheConfiguration("cache2"),
+            cacheConfiguration("cache3"),
+            cacheConfiguration(DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME),
+            cacheConfiguration(DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME));
+
+        return cfg;
+    }
+
+    /**
+     * @param cacheName Cache name.
+     * @return Cache configuration.
+     */
+    private CacheConfiguration cacheConfiguration(String cacheName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+
+        cfg.setName(cacheName);
+
+        cfg.setCacheMode(PARTITIONED);
+
+        cfg.setAtomicityMode(ATOMIC);
+
+        cfg.setStatisticsEnabled(true);
+
+        return cfg;
+    }
+    /**
+     * @param igniteInstanceName Ignite instance name.
+     * @return Hibernate configuration.
+     */
+    protected Configuration hibernateConfiguration(String igniteInstanceName) {
+        Configuration cfg = new Configuration();
+
+        cfg.addAnnotatedClass(Entity1.class);
+        cfg.addAnnotatedClass(Entity2.class);
+        cfg.addAnnotatedClass(Entity3.class);
+        cfg.addAnnotatedClass(Entity4.class);
+
+        cfg.setProperty(HibernateAccessStrategyFactory.DFLT_ACCESS_TYPE_PROPERTY, AccessType.NONSTRICT_READ_WRITE.name());
+
+        cfg.setProperty(HBM2DDL_AUTO, "create");
+
+        cfg.setProperty(GENERATE_STATISTICS, "true");
+
+        cfg.setProperty(USE_SECOND_LEVEL_CACHE, "true");
+
+        cfg.setProperty(USE_QUERY_CACHE, "true");
+
+        cfg.setProperty(CACHE_REGION_FACTORY, HibernateRegionFactory.class.getName());
+
+        cfg.setProperty(RELEASE_CONNECTIONS, "on_close");
+
+        cfg.setProperty(HibernateAccessStrategyFactory.IGNITE_INSTANCE_NAME_PROPERTY, igniteInstanceName);
+
+        cfg.setProperty(REGION_CACHE_PROPERTY + ENTITY1_NAME, "cache1");
+        cfg.setProperty(REGION_CACHE_PROPERTY + ENTITY2_NAME, "cache2");
+        cfg.setProperty(REGION_CACHE_PROPERTY + DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME, DEFAULT_UPDATE_TIMESTAMPS_REGION_UNQUALIFIED_NAME);
+        cfg.setProperty(REGION_CACHE_PROPERTY + DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME, DEFAULT_QUERY_RESULTS_REGION_UNQUALIFIED_NAME);
+
+        return cfg;
+    }
+
+    /**
+     * Tests property {@link HibernateAccessStrategyFactory#REGION_CACHE_PROPERTY}.
+     */
+    @Test
+    public void testPerRegionCacheProperty() {
+        testCacheUsage(1, 1, 0, 1, 1);
+    }
+
+    /**
+     * @param expCache1 Expected size of cache with name 'cache1'.
+     * @param expCache2 Expected size of cache with name 'cache2'.
+     * @param expCache3 Expected size of cache with name 'cache3'.
+     * @param expCacheE3 Expected size of cache with name {@link #ENTITY3_NAME}.
+     * @param expCacheE4 Expected size of cache with name {@link #ENTITY4_NAME}.
+     */
+    @SuppressWarnings("unchecked")
+    private void testCacheUsage(int expCache1, int expCache2, int expCache3, int expCacheE3, int expCacheE4) {
+        SessionFactory sesFactory = startHibernate(getTestIgniteInstanceName(0));
+
+        try {
+            Session ses = sesFactory.openSession();
+
+            try {
+                Transaction tx = ses.beginTransaction();
+
+                ses.save(new Entity1());
+                ses.save(new Entity2());
+                ses.save(new Entity3());
+                ses.save(new Entity4());
+
+                tx.commit();
+            }
+            finally {
+                ses.close();
+            }
+
+            ses = sesFactory.openSession();
+
+            try {
+                List<Entity1> list1 = getResultsList(ses, Entity1.class);
+
+                assertEquals(1, list1.size());
+
+                for (Entity1 e : list1) {
+                    ses.load(ENTITY1_NAME, e.getId());
+                    assertNotNull(e.getId());
+                }
+
+                List<Entity2> list2 = getResultsList(ses, Entity2.class);
+
+                assertEquals(1, list2.size());
+
+                for (Entity2 e : list2)
+                    assertNotNull(e.getId());
+
+                List<Entity3> list3 = getResultsList(ses, Entity3.class);
+
+                assertEquals(1, list3.size());
+
+                for (Entity3 e : list3)
+                    assertNotNull(e.getId());
+
+                List<Entity4> list4 = getResultsList(ses, Entity4.class);
+
+                assertEquals(1, list4.size());
+
+                for (Entity4 e : list4)
+                    assertNotNull(e.getId());
+            }
+            finally {
+                ses.close();
+            }
+
+            IgniteCache<Object, Object> cache1 = grid(0).cache("cache1");
+            IgniteCache<Object, Object> cache2 = grid(0).cache("cache2");
+            IgniteCache<Object, Object> cache3 = grid(0).cache("cache3");
+            IgniteCache<Object, Object> cacheE3 = grid(0).cache(ENTITY3_NAME);
+            IgniteCache<Object, Object> cacheE4 = grid(0).cache(ENTITY4_NAME);
+
+            assertEquals("Unexpected entries: " + toSet(cache1.iterator()), expCache1, cache1.size());
+            assertEquals("Unexpected entries: " + toSet(cache2.iterator()), expCache2, cache2.size());
+            assertEquals("Unexpected entries: " + toSet(cache3.iterator()), expCache3, cache3.size());
+            assertEquals("Unexpected entries: " + toSet(cacheE3.iterator()), expCacheE3, cacheE3.size());
+            assertEquals("Unexpected entries: " + toSet(cacheE4.iterator()), expCacheE4, cacheE4.size());
+        }
+        finally {
+            sesFactory.close();
+        }
+    }
+
+    private <T> List<T> getResultsList(Session ses, Class<T> entityClass) {
+        CriteriaBuilder builder = ses.getCriteriaBuilder();
+        CriteriaQuery<T> query = builder.createQuery(entityClass);
+        Root<T> root = query.from(entityClass);
+        query.select(root);
+        return ses.createQuery(query).getResultList();
+    }
+
+    /**
+     *
+     */
+    private <K, V> Set<Cache.Entry<K, V>> toSet(Iterator<Cache.Entry<K, V>> iter){
+        Set<Cache.Entry<K, V>> set = new HashSet<>();
+
+        while (iter.hasNext())
+            set.add(iter.next());
+
+        return set;
+    }
+
+    /**
+     * @param igniteInstanceName Name of the grid providing caches.
+     * @return Session factory.
+     */
+    private SessionFactory startHibernate(String igniteInstanceName) {
+        Configuration cfg = hibernateConfiguration(igniteInstanceName);
+
+        StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder();
+
+        builder.applySetting("hibernate.connection.url", CONNECTION_URL);
+        builder.applySetting("hibernate.show_sql", false);
+        builder.applySettings(cfg.getProperties());
+
+        return cfg.buildSessionFactory(builder.build());
+    }
+
+    /**
+     * Test Hibernate entity1.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity1 {
+        /** */
+        private int id;
+
+        /**
+         * @return ID.
+         */
+        @Id
+        @GeneratedValue
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+    }
+
+    /**
+     * Test Hibernate entity2.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity2 {
+        /** */
+        private int id;
+
+        /**
+         * @return ID.
+         */
+        @Id
+        @GeneratedValue
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+    }
+
+    /**
+     * Test Hibernate entity3.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity3 {
+        /** */
+        private int id;
+
+        /**
+         * @return ID.
+         */
+        @Id
+        @GeneratedValue
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+    }
+
+    /**
+     * Test Hibernate entity4.
+     */
+    @javax.persistence.Entity
+    @SuppressWarnings({"PublicInnerClass", "UnnecessaryFullyQualifiedName"})
+    @Cacheable
+    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+    public static class Entity4 {
+        /** */
+        private int id;
+
+        /**
+         * @return ID.
+         */
+        @Id
+        @GeneratedValue
+        public int getId() {
+            return id;
+        }
+
+        /**
+         * @param id ID.
+         */
+        public void setId(int id) {
+            this.id = id;
+        }
+    }
+}


[19/52] [abbrv] ignite git commit: IGNITE-9747: [ML] Add Bernoulli Naive Bayes classifier

Posted by sb...@apache.org.
IGNITE-9747: [ML] Add Bernoulli Naive Bayes classifier

This closes #5204


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/00af5e62
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/00af5e62
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/00af5e62

Branch: refs/heads/ignite-627
Commit: 00af5e62ac7d35ada714ef81d2b7a19d43bb36af
Parents: 32f564c
Author: Ravil Galeyev <de...@yandex.ru>
Authored: Tue Dec 18 15:49:06 2018 +0300
Committer: Yury Babak <yb...@gridgain.com>
Committed: Tue Dec 18 15:49:06 2018 +0300

----------------------------------------------------------------------
 .../DiscreteNaiveBayesTrainerExample.java       | 115 +++++++++
 .../discrete/DiscreteNaiveBayesModel.java       | 127 ++++++++++
 .../discrete/DiscreteNaiveBayesSumsHolder.java  |  54 +++++
 .../discrete/DiscreteNaiveBayesTrainer.java     | 233 +++++++++++++++++++
 .../ml/naivebayes/discrete/package-info.java    |  22 ++
 .../ignite/ml/util/MLSandboxDatasets.java       |   5 +-
 .../english_vs_scottish_binary_dataset.csv      |  14 ++
 .../discrete/DiscreteNaiveBayesModelTest.java   |  45 ++++
 .../discrete/DiscreteNaiveBayesTest.java        |  67 ++++++
 .../discrete/DiscreteNaiveBayesTrainerTest.java | 185 +++++++++++++++
 10 files changed, 866 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
----------------------------------------------------------------------
diff --git a/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
new file mode 100644
index 0000000..5af3f69
--- /dev/null
+++ b/examples/src/main/java/org/apache/ignite/examples/ml/naivebayes/DiscreteNaiveBayesTrainerExample.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.examples.ml.naivebayes;
+
+import java.io.FileNotFoundException;
+import java.util.Arrays;
+import javax.cache.Cache;
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCache;
+import org.apache.ignite.Ignition;
+import org.apache.ignite.cache.query.QueryCursor;
+import org.apache.ignite.cache.query.ScanQuery;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.naivebayes.discrete.DiscreteNaiveBayesModel;
+import org.apache.ignite.ml.naivebayes.discrete.DiscreteNaiveBayesTrainer;
+import org.apache.ignite.ml.util.MLSandboxDatasets;
+import org.apache.ignite.ml.util.SandboxMLCache;
+
+/**
+ * Run naive Bayes classification model based on <a href=https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Multinomial_naive_Bayes">
+ * naive Bayes classifier</a> algorithm ({@link DiscreteNaiveBayesTrainer}) over distributed cache.
+ * <p>
+ * Code in this example launches Ignite grid and fills the cache with test data points.
+ * </p>
+ * <p>
+ * After that it trains the Discrete naive Bayes classification model based on the specified data.</p>
+ * <p>
+ * Finally, this example loops over the test set of data points, applies the trained model to predict the target value,
+ * compares prediction to expected outcome (ground truth), and builds
+ * <a href="https://en.wikipedia.org/wiki/Confusion_matrix">confusion matrix</a>.</p>
+ * <p>
+ * You can change the test data used in this example and re-run it to explore this algorithm further.</p>
+ */
+public class DiscreteNaiveBayesTrainerExample {
+    /** Run example. */
+    public static void main(String[] args) throws FileNotFoundException {
+        System.out.println();
+        System.out.println(">>> Discrete naive Bayes classification model over partitioned dataset usage example started.");
+        // Start ignite grid.
+        try (Ignite ignite = Ignition.start("examples/config/example-ignite.xml")) {
+            System.out.println(">>> Ignite grid started.");
+
+            IgniteCache<Integer, Vector> dataCache = new SandboxMLCache(ignite)
+                .fillCacheWith(MLSandboxDatasets.ENGLISH_VS_SCOTTISH);
+
+            double[][] thresholds = new double[][] {{.5}, {.5}, {.5}, {.5}, {.5}};
+            System.out.println(">>> Create new Discrete naive Bayes classification trainer object.");
+            DiscreteNaiveBayesTrainer trainer = new DiscreteNaiveBayesTrainer()
+                .setBucketThresholds(thresholds);
+
+            System.out.println(">>> Perform the training to get the model.");
+            DiscreteNaiveBayesModel mdl = trainer.fit(
+                ignite,
+                dataCache,
+                (k, v) -> v.copyOfRange(1, v.size()),
+                (k, v) -> v.get(0)
+            );
+
+            System.out.println(">>> Discrete Naive Bayes model: " + mdl);
+
+            int amountOfErrors = 0;
+            int totalAmount = 0;
+
+            // Build confusion matrix. See https://en.wikipedia.org/wiki/Confusion_matrix
+            int[][] confusionMtx = {{0, 0}, {0, 0}};
+
+            try (QueryCursor<Cache.Entry<Integer, Vector>> observations = dataCache.query(new ScanQuery<>())) {
+                for (Cache.Entry<Integer, Vector> observation : observations) {
+                    Vector val = observation.getValue();
+                    Vector inputs = val.copyOfRange(1, val.size());
+                    double groundTruth = val.get(0);
+
+                    double prediction = mdl.apply(inputs);
+
+                    totalAmount++;
+                    if (groundTruth != prediction)
+                        amountOfErrors++;
+
+                    int idx1 = (int)prediction;
+                    int idx2 = (int)groundTruth;
+
+                    confusionMtx[idx1][idx2]++;
+
+                    System.out.printf(">>> | %.4f\t\t| %.4f\t\t|\n", prediction, groundTruth);
+                }
+
+                System.out.println(">>> ---------------------------------");
+
+                System.out.println("\n>>> Absolute amount of errors " + amountOfErrors);
+                System.out.println("\n>>> Accuracy " + (1 - amountOfErrors / (double)totalAmount));
+            }
+
+            System.out.println("\n>>> Confusion matrix is " + Arrays.deepToString(confusionMtx));
+            System.out.println(">>> ---------------------------------");
+
+            System.out.println(">>> Discrete Naive bayes model over partitioned dataset usage example completed.");
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.java b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.java
new file mode 100644
index 0000000..7ab2957
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModel.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.naivebayes.discrete;
+
+import java.io.Serializable;
+import org.apache.ignite.ml.Exportable;
+import org.apache.ignite.ml.Exporter;
+import org.apache.ignite.ml.Model;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+
+/**
+ * Discrete naive Bayes model which predicts result value {@code y} belongs to a class {@code C_k, k in [0..K]} as
+ * {@code p(C_k,y) =x_1*p_k1^x *...*x_i*p_ki^x_i}. Where {@code x_i} is a discrete feature, {@code p_ki} is a prior
+ * probability probability of class {@code p(x|C_k)}. Returns the number of the most possible class.
+ */
+public class DiscreteNaiveBayesModel implements Model<Vector, Double>, Exportable<DiscreteNaiveBayesModel>, Serializable {
+    /** */
+    private static final long serialVersionUID = -127386523291350345L;
+    /**
+     * Probabilities of features for all classes for each label. {@code labels[c][f][b]} contains a probability for
+     * class {@code c} for feature {@code f} for bucket {@code b}.
+     */
+    private final double[][][] probabilities;
+    /** Prior probabilities of each class */
+    private final double[] clsProbabilities;
+    /** Labels. */
+    private final double[] labels;
+    /**
+     * The bucket thresholds to convert a features to discrete values. {@code bucketThresholds[f][b]} contains the right
+     * border for feature {@code f} for bucket {@code b}. Everything which is above the last thresdold goes to the next
+     * bucket.
+     */
+    private final double[][] bucketThresholds;
+    /** Amount values in each buckek for each feature per label. */
+    private final DiscreteNaiveBayesSumsHolder sumsHolder;
+
+    /**
+     * @param probabilities Probabilities of features for classes.
+     * @param clsProbabilities Prior probabilities for classes.
+     * @param bucketThresholds The threshold to convert a feature to a binary value.
+     * @param sumsHolder Amount values which are abouve the threshold per label.
+     * @param labels Labels.
+     */
+    public DiscreteNaiveBayesModel(double[][][] probabilities, double[] clsProbabilities, double[] labels,
+        double[][] bucketThresholds, DiscreteNaiveBayesSumsHolder sumsHolder) {
+        this.probabilities = probabilities;
+        this.clsProbabilities = clsProbabilities;
+        this.labels = labels;
+        this.bucketThresholds = bucketThresholds;
+        this.sumsHolder = sumsHolder;
+    }
+
+    /** {@inheritDoc} */
+    @Override public <P> void saveModel(Exporter<DiscreteNaiveBayesModel, P> exporter, P path) {
+        exporter.save(this, path);
+    }
+
+    /**
+     * @param vector features vector.
+     * @return a label with max probability.
+     */
+    @Override public Double apply(Vector vector) {
+        double maxProbapilityPower = -Double.MAX_VALUE;
+        int maxLabelIndex = -1;
+
+        for (int i = 0; i < clsProbabilities.length; i++) {
+            double probabilityPower = Math.log(clsProbabilities[i]);
+
+            for (int j = 0; j < probabilities[0].length; j++) {
+                int x = toBucketNumber(vector.get(j), bucketThresholds[j]);
+                double p = probabilities[i][j][x];
+                probabilityPower += (p > 0 ? Math.log(p) : .0);
+            }
+
+            if (probabilityPower > maxProbapilityPower) {
+                maxLabelIndex = i;
+                maxProbapilityPower = probabilityPower;
+            }
+        }
+        return labels[maxLabelIndex];
+    }
+
+    /** */
+    public double[][][] getProbabilities() {
+        return probabilities;
+    }
+
+    /** */
+    public double[] getClsProbabilities() {
+        return clsProbabilities;
+    }
+
+    /** */
+    public double[][] getBucketThresholds() {
+        return bucketThresholds;
+    }
+
+    /** */
+    public DiscreteNaiveBayesSumsHolder getSumsHolder() {
+        return sumsHolder;
+    }
+
+    /** Returs a bucket number to which the {@code value} corresponds. */
+    private int toBucketNumber(double val, double[] thresholds) {
+        for (int i = 0; i < thresholds.length; i++) {
+            if (val < thresholds[i])
+                return i;
+        }
+
+        return thresholds.length;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.java b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.java
new file mode 100644
index 0000000..61ac692
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesSumsHolder.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ignite.ml.naivebayes.discrete;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.ml.math.util.MapUtil;
+
+/** Service class is used to calculate amount of values which are below the threshold. */
+public class DiscreteNaiveBayesSumsHolder implements AutoCloseable, Serializable {
+    /** Serial version uid. */
+    private static final long serialVersionUID = -2059362365851744206L;
+    /** Sums of values correspones to a particular bucket for all features for each label */
+    Map<Double, long[][]> valuesInBucketPerLbl = new HashMap<>();
+    /** Rows count for each label */
+    Map<Double, Integer> featureCountersPerLbl = new HashMap<>();
+
+    /** Merge to current */
+    DiscreteNaiveBayesSumsHolder merge(DiscreteNaiveBayesSumsHolder other) {
+        valuesInBucketPerLbl = MapUtil.mergeMaps(valuesInBucketPerLbl, other.valuesInBucketPerLbl, this::sum, HashMap::new);
+        featureCountersPerLbl = MapUtil.mergeMaps(featureCountersPerLbl, other.featureCountersPerLbl, (i1, i2) -> i1 + i2, HashMap::new);
+        return this;
+    }
+
+    /** In-place operation. Sums {@code arr2} to {@code arr1} element to element. */
+    private long[][] sum(long[][] arr1, long[][] arr2) {
+        for (int i = 0; i < arr1.length; i++) {
+            for (int j = 0; j < arr1[i].length; j++)
+                arr1[i][j] += arr2[i][j];
+        }
+
+        return arr1;
+    }
+
+    /** */
+    @Override public void close() {
+        // Do nothing, GC will clean up.
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.java
new file mode 100644
index 0000000..0779b84
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainer.java
@@ -0,0 +1,233 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.naivebayes.discrete;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import org.apache.ignite.ml.dataset.Dataset;
+import org.apache.ignite.ml.dataset.DatasetBuilder;
+import org.apache.ignite.ml.dataset.UpstreamEntry;
+import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
+import org.apache.ignite.ml.math.functions.IgniteBiFunction;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.trainers.SingleLabelDatasetTrainer;
+
+/**
+ * Trainer for the Discrete naive Bayes classification model. The trainer calculates prior probabilities from the input
+ * dataset. Prior probabilities can be also set by {@code setPriorProbabilities} or {@code withEquiprobableClasses}. If
+ * {@code equiprobableClasses} is set, the probalilities of all classes will be {@code 1/k}, where {@code k} is classes
+ * count. Also, the trainer converts feature to discrete values by using {@code bucketThresholds}.
+ */
+public class DiscreteNaiveBayesTrainer extends SingleLabelDatasetTrainer<DiscreteNaiveBayesModel> {
+    /** Precision to compare bucketThresholds. */
+    private static final double PRECISION = 1e-10;
+    /* Preset prior probabilities. */
+    private double[] priorProbabilities;
+    /* Sets equivalent probability for all classes. */
+    private boolean equiprobableClasses;
+    /** The threshold to convert a feature to a discrete value. */
+    private double[][] bucketThresholds;
+
+    /**
+     * Trains model based on the specified data.
+     *
+     * @param datasetBuilder Dataset builder.
+     * @param featureExtractor Feature extractor.
+     * @param lbExtractor Label extractor.
+     * @return Model.
+     */
+    @Override public <K, V> DiscreteNaiveBayesModel fit(DatasetBuilder<K, V> datasetBuilder,
+        IgniteBiFunction<K, V, Vector> featureExtractor, IgniteBiFunction<K, V, Double> lbExtractor) {
+        return updateModel(null, datasetBuilder, featureExtractor, lbExtractor);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected boolean checkState(DiscreteNaiveBayesModel mdl) {
+        if (mdl.getBucketThresholds().length != bucketThresholds.length)
+            return false;
+
+        for (int i = 0; i < bucketThresholds.length; i++) {
+            for (int j = 0; i < bucketThresholds[i].length; i++) {
+                if (Math.abs(mdl.getBucketThresholds()[i][j] - bucketThresholds[i][j]) > PRECISION)
+                    return false;
+            }
+        }
+
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected <K, V> DiscreteNaiveBayesModel updateModel(DiscreteNaiveBayesModel mdl,
+        DatasetBuilder<K, V> datasetBuilder, IgniteBiFunction<K, V, Vector> featureExtractor,
+        IgniteBiFunction<K, V, Double> lbExtractor) {
+
+        try (Dataset<EmptyContext, DiscreteNaiveBayesSumsHolder> dataset = datasetBuilder.build(
+            envBuilder,
+            (env, upstream, upstreamSize) -> new EmptyContext(),
+            (env, upstream, upstreamSize, ctx) -> {
+                DiscreteNaiveBayesSumsHolder res = new DiscreteNaiveBayesSumsHolder();
+                while (upstream.hasNext()) {
+                    UpstreamEntry<K, V> entity = upstream.next();
+
+                    Vector features = featureExtractor.apply(entity.getKey(), entity.getValue());
+                    Double lb = lbExtractor.apply(entity.getKey(), entity.getValue());
+
+                    long[][] valuesInBucket;
+
+                    int size = features.size();
+                    if (!res.valuesInBucketPerLbl.containsKey(lb)) {
+                        valuesInBucket = new long[size][];
+                        for (int i = 0; i < size; i++) {
+                            valuesInBucket[i] = new long[bucketThresholds[i].length + 1];
+                            Arrays.fill(valuesInBucket[i], 0L);
+                        }
+                        res.valuesInBucketPerLbl.put(lb, valuesInBucket);
+                    }
+
+                    if (!res.featureCountersPerLbl.containsKey(lb))
+                        res.featureCountersPerLbl.put(lb, 0);
+
+                    res.featureCountersPerLbl.put(lb, res.featureCountersPerLbl.get(lb) + 1);
+
+                    valuesInBucket = res.valuesInBucketPerLbl.get(lb);
+
+                    for (int j = 0; j < size; j++) {
+                        double x = features.get(j);
+                        int bucketNum = toBucketNumber(x, bucketThresholds[j]);
+                        valuesInBucket[j][bucketNum] += 1;
+                    }
+                }
+                return res;
+            })) {
+                DiscreteNaiveBayesSumsHolder sumsHolder = dataset.compute(t -> t, (a, b) -> {
+                    if (a == null)
+                        return b == null ? new DiscreteNaiveBayesSumsHolder() : b;
+                    if (b == null)
+                        return a;
+                    return a.merge(b);
+                });
+
+                if (mdl != null && checkState(mdl)) {
+                    if (checkSumsHolder(sumsHolder, mdl.getSumsHolder()))
+                        sumsHolder = sumsHolder.merge(mdl.getSumsHolder());
+                }
+
+                List<Double> sortedLabels = new ArrayList<>(sumsHolder.featureCountersPerLbl.keySet());
+                sortedLabels.sort(Double::compareTo);
+                assert !sortedLabels.isEmpty() : "The dataset should contain at least one feature";
+
+                int lbCnt = sortedLabels.size();
+                int featureCnt = sumsHolder.valuesInBucketPerLbl.get(sortedLabels.get(0)).length;
+
+                double[][][] probabilities = new double[lbCnt][featureCnt][];
+                double[] classProbabilities = new double[lbCnt];
+                double[] labels = new double[lbCnt];
+                long datasetSize = sumsHolder.featureCountersPerLbl.values().stream().mapToInt(i -> i).sum();
+
+                int lbl = 0;
+
+                for (Double label : sortedLabels) {
+                    int cnt = sumsHolder.featureCountersPerLbl.get(label);
+                    long[][] sum = sumsHolder.valuesInBucketPerLbl.get(label);
+
+                    for (int i = 0; i < featureCnt; i++) {
+
+                        int bucketsCnt = sum[i].length;
+                        probabilities[lbl][i] = new double[bucketsCnt];
+
+                        for (int j = 0; j < bucketsCnt; j++)
+                            probabilities[lbl][i][j] = (double)sum[i][j] / cnt;
+                    }
+
+                    if (equiprobableClasses)
+                        classProbabilities[lbl] = 1. / lbCnt;
+                    else if (priorProbabilities != null) {
+                        assert classProbabilities.length == priorProbabilities.length;
+                        classProbabilities[lbl] = priorProbabilities[lbl];
+                    }
+                    else
+                        classProbabilities[lbl] = (double)cnt / datasetSize;
+
+                    labels[lbl] = label;
+                    ++lbl;
+                }
+            return new DiscreteNaiveBayesModel(probabilities, classProbabilities, labels, bucketThresholds, sumsHolder);
+        }
+        catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    /** Checks that two {@code DiscreteNaiveBayesSumsHolder} contain the same lengths of future vectors. */
+    private boolean checkSumsHolder(DiscreteNaiveBayesSumsHolder holder1, DiscreteNaiveBayesSumsHolder holder2) {
+        if (holder1 == null || holder2 == null)
+            return false;
+
+        Optional<long[][]> optionalFirst = holder1.valuesInBucketPerLbl.values().stream().findFirst();
+        Optional<long[][]> optionalSecond = holder2.valuesInBucketPerLbl.values().stream().findFirst();
+
+        if (optionalFirst.isPresent()) {
+            if (optionalSecond.isPresent())
+                return optionalFirst.get().length == optionalSecond.get().length;
+            else
+                return false;
+        }
+        else
+            return !optionalSecond.isPresent();
+    }
+
+    /** Sets equal probability for all classes. */
+    public DiscreteNaiveBayesTrainer withEquiprobableClasses() {
+        resetProbabilitiesSettings();
+        equiprobableClasses = true;
+        return this;
+    }
+
+    /** Sets prior probabilities. */
+    public DiscreteNaiveBayesTrainer setPriorProbabilities(double[] priorProbabilities) {
+        resetProbabilitiesSettings();
+        this.priorProbabilities = priorProbabilities.clone();
+        return this;
+    }
+
+    /** Sets buckest borders. */
+    public DiscreteNaiveBayesTrainer setBucketThresholds(double[][] bucketThresholds) {
+        this.bucketThresholds = bucketThresholds;
+        return this;
+    }
+
+    /** Sets default settings {@code equiprobableClasses} to {@code false} and removes priorProbabilities. */
+    public DiscreteNaiveBayesTrainer resetProbabilitiesSettings() {
+        equiprobableClasses = false;
+        priorProbabilities = null;
+        return this;
+    }
+
+    /** Returs a bucket number to which the {@code value} corresponds. */
+    private int toBucketNumber(double val, double[] thresholds) {
+        for (int i = 0; i < thresholds.length; i++) {
+            if (val < thresholds[i])
+                return i;
+        }
+
+        return thresholds.length;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/package-info.java b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/package-info.java
new file mode 100644
index 0000000..092d22d
--- /dev/null
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/naivebayes/discrete/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Contains Bernoulli naive Bayes classifier.
+ */
+package org.apache.ignite.ml.naivebayes.discrete;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java b/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java
index 84ae8f6..b8d5fb4 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/util/MLSandboxDatasets.java
@@ -50,7 +50,10 @@ public enum MLSandboxDatasets {
     WINE_RECOGNITION("modules/ml/src/main/resources/datasets/wine.txt", false, ","),
 
     /** The Boston house-prices dataset. Could be found <a href="https://archive.ics.uci.edu/ml/machine-learning-databases/housing/">here</a>. */
-    BOSTON_HOUSE_PRICES("modules/ml/src/main/resources/datasets/boston_housing_dataset.txt", false, ",");
+    BOSTON_HOUSE_PRICES("modules/ml/src/main/resources/datasets/boston_housing_dataset.txt", false, ","),
+
+    /** Example from book Barber D. Bayesian reasoning and machine learning. Chapter 10. */
+    ENGLISH_VS_SCOTTISH("modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv", true, ",");
 
     /** Filename. */
     private final String filename;

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv b/modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv
new file mode 100644
index 0000000..0fa0f8b
--- /dev/null
+++ b/modules/ml/src/main/resources/datasets/english_vs_scottish_binary_dataset.csv
@@ -0,0 +1,14 @@
+english, shortbread, lager, whiskey, porridge, football
+1, 0, 0, 1, 1, 1
+1, 1, 0, 1, 1, 0
+1, 1, 1, 0, 0, 1
+1, 1, 1, 0, 0, 0
+1, 0, 1, 0, 0, 1
+1, 0, 0, 0, 1, 0
+0, 1, 0, 0, 1, 1
+0, 1, 1, 0, 0, 1
+0, 1, 1, 1, 1, 0
+0, 1, 1, 0, 1, 0
+0, 1, 1, 0, 1, 1
+0, 1, 0, 1, 1, 0
+0, 1, 0, 1, 0, 0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModelTest.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModelTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModelTest.java
new file mode 100644
index 0000000..f6b947b
--- /dev/null
+++ b/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesModelTest.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.naivebayes.discrete;
+
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+/** Tests for {@code DiscreteNaiveBayesModel} */
+public class DiscreteNaiveBayesModelTest {
+    /** */
+    @Test
+    public void testPredictWithTwoClasses() {
+        double first = 1;
+        double second = 2;
+        double[][][] probabilities = new double[][][] {
+            {{.5, .5}, {.2, .3, .5}, {2. / 3., 1. / 3.}, {.4, .1, .5}, {.5, .5}},
+            {{0, 1}, {1. / 7, 2. / 7, 4. / 7}, {4. / 7, 3. / 7}, {2. / 7, 3. / 7, 2. / 7}, {4. / 7, 3. / 7,}}
+        };
+
+        double[] classProbabilities = new double[] {6. / 13, 7. / 13};
+        double[][] thresholds = new double[][] {{.5}, {.2, .7}, {.5}, {.5, 1.5}, {.5}};
+        DiscreteNaiveBayesModel mdl = new DiscreteNaiveBayesModel(probabilities, classProbabilities, new double[] {first, second}, thresholds, new DiscreteNaiveBayesSumsHolder());
+        Vector observation = VectorUtils.of(2, 0, 1, 2, 0);
+
+        Assert.assertEquals(second, mdl.apply(observation), 0.0001);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTest.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTest.java
new file mode 100644
index 0000000..25fb37b
--- /dev/null
+++ b/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTest.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.naivebayes.discrete;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.ml.dataset.impl.local.LocalDatasetBuilder;
+import org.apache.ignite.ml.math.primitives.vector.Vector;
+import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Integration tests for Bernoulli naive Bayes algorithm with different datasets.
+ */
+public class DiscreteNaiveBayesTest {
+    /** Precision in test checks. */
+    private static final double PRECISION = 1e-2;
+
+    /** Example from book Barber D. Bayesian reasoning and machine learning. Chapter 10. */
+    @Test
+    public void testLearnsAndPredictCorrently() {
+        double english = 1.;
+        double scottish = 2.;
+        Map<Integer, double[]> data = new HashMap<>();
+        data.put(0, new double[] {0, 0, 1, 1, 1, english});
+        data.put(1, new double[] {1, 0, 1, 1, 0, english});
+        data.put(2, new double[] {1, 1, 0, 0, 1, english});
+        data.put(3, new double[] {1, 1, 0, 0, 0, english});
+        data.put(4, new double[] {0, 1, 0, 0, 1, english});
+        data.put(5, new double[] {0, 0, 0, 1, 0, english});
+        data.put(6, new double[] {1, 0, 0, 1, 1, scottish});
+        data.put(7, new double[] {1, 1, 0, 0, 1, scottish});
+        data.put(8, new double[] {1, 1, 1, 1, 0, scottish});
+        data.put(9, new double[] {1, 1, 0, 1, 0, scottish});
+        data.put(10, new double[] {1, 1, 0, 1, 1, scottish});
+        data.put(11, new double[] {1, 0, 1, 1, 0, scottish});
+        data.put(12, new double[] {1, 0, 1, 0, 0, scottish});
+        double[][] thresholds = new double[][] {{.5}, {.5}, {.5}, {.5}, {.5}};
+        DiscreteNaiveBayesTrainer trainer = new DiscreteNaiveBayesTrainer().setBucketThresholds(thresholds);
+
+        DiscreteNaiveBayesModel model = trainer.fit(
+            new LocalDatasetBuilder<>(data, 2),
+            (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
+            (k, v) -> v[v.length - 1]
+        );
+        Vector observation = VectorUtils.of(1, 0, 1, 1, 0);
+
+        Assert.assertEquals(scottish, model.apply(observation), PRECISION);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/00af5e62/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainerTest.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainerTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainerTest.java
new file mode 100644
index 0000000..3ffd5cf
--- /dev/null
+++ b/modules/ml/src/test/java/org/apache/ignite/ml/naivebayes/discrete/DiscreteNaiveBayesTrainerTest.java
@@ -0,0 +1,185 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ignite.ml.naivebayes.discrete;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.ignite.ml.common.TrainerTest;
+import org.apache.ignite.ml.dataset.impl.local.LocalDatasetBuilder;
+import org.apache.ignite.ml.math.primitives.vector.VectorUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/** Test for {@link DiscreteNaiveBayesTrainer} */
+public class DiscreteNaiveBayesTrainerTest extends TrainerTest {
+
+    /** Precision in test checks. */
+    private static final double PRECISION = 1e-2;
+    /** */
+    private static final double LABEL_1 = 1.;
+    /** */
+    private static final double LABEL_2 = 2.;
+
+    /** Binary data. */
+    private static final Map<Integer, double[]> binarizedData = new HashMap<>();
+    /** Data. */
+    private static final Map<Integer, double[]> data = new HashMap<>();
+    /** */
+    private static final double[][] binarizedDatathresholds = new double[][] {{.5}, {.5}, {.5}, {.5}, {.5}};
+    private static final double[][] thresholds = new double[][] {{4, 8}, {.5}, {.3, .4, .5}, {250, 500, 750}};
+
+    static {
+        binarizedData.put(0, new double[] {0, 0, 1, 1, 1, LABEL_1});
+        binarizedData.put(1, new double[] {1, 0, 1, 1, 0, LABEL_1});
+        binarizedData.put(2, new double[] {1, 1, 0, 0, 1, LABEL_1});
+        binarizedData.put(3, new double[] {1, 1, 0, 0, 0, LABEL_1});
+        binarizedData.put(4, new double[] {0, 1, 0, 0, 1, LABEL_1});
+        binarizedData.put(5, new double[] {0, 0, 0, 1, 0, LABEL_1});
+
+        binarizedData.put(6, new double[] {1, 0, 0, 1, 1, LABEL_2});
+        binarizedData.put(7, new double[] {1, 1, 0, 0, 1, LABEL_2});
+        binarizedData.put(8, new double[] {1, 1, 1, 1, 0, LABEL_2});
+        binarizedData.put(9, new double[] {1, 1, 0, 1, 0, LABEL_2});
+        binarizedData.put(10, new double[] {1, 1, 0, 1, 1, LABEL_2});
+        binarizedData.put(11, new double[] {1, 0, 1, 1, 0, LABEL_2});
+        binarizedData.put(12, new double[] {1, 0, 1, 0, 0, LABEL_2});
+
+        data.put(0, new double[] {2, 0, .34, 123, LABEL_1});
+        data.put(1, new double[] {8, 0, .37, 561, LABEL_1});
+        data.put(2, new double[] {5, 1, .01, 678, LABEL_1});
+        data.put(3, new double[] {2, 1, .32, 453, LABEL_1});
+        data.put(4, new double[] {7, 1, .67, 980, LABEL_1});
+        data.put(5, new double[] {2, 1, .69, 912, LABEL_1});
+        data.put(6, new double[] {8, 0, .43, 453, LABEL_1});
+        data.put(7, new double[] {2, 0, .45, 752, LABEL_1});
+        data.put(8, new double[] {7, 1, .01, 132, LABEL_2});
+        data.put(9, new double[] {2, 1, .68, 169, LABEL_2});
+        data.put(10, new double[] {8, 0, .43, 453, LABEL_2});
+        data.put(11, new double[] {2, 1, .45, 748, LABEL_2});
+    }
+
+    /** */
+    private DiscreteNaiveBayesTrainer trainer;
+
+    /** Initialization {@code DiscreteNaiveBayesTrainer}. */
+    @Before
+    public void createTrainer() {
+        trainer = new DiscreteNaiveBayesTrainer().setBucketThresholds(binarizedDatathresholds);
+    }
+
+    /** */
+    @Test
+    public void testReturnsCorrectLabelProbalities() {
+
+        DiscreteNaiveBayesModel model = trainer.fit(
+            new LocalDatasetBuilder<>(binarizedData, parts),
+            (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
+            (k, v) -> v[v.length - 1]
+        );
+
+        double[] expectedProbabilities = {6. / binarizedData.size(), 7. / binarizedData.size()};
+        Assert.assertArrayEquals(expectedProbabilities, model.getClsProbabilities(), PRECISION);
+    }
+
+    /** */
+    @Test
+    public void testReturnsEquivalentProbalitiesWhenSetEquiprobableClasses_() {
+        DiscreteNaiveBayesTrainer trainer = new DiscreteNaiveBayesTrainer()
+            .setBucketThresholds(binarizedDatathresholds)
+            .withEquiprobableClasses();
+
+        DiscreteNaiveBayesModel model = trainer.fit(
+            new LocalDatasetBuilder<>(binarizedData, parts),
+            (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
+            (k, v) -> v[v.length - 1]
+        );
+
+        Assert.assertArrayEquals(new double[] {.5, .5}, model.getClsProbabilities(), PRECISION);
+    }
+
+    /** */
+    @Test
+    public void testReturnsPresetProbalitiesWhenSetPriorProbabilities() {
+        double[] priorProbabilities = new double[] {.35, .65};
+        DiscreteNaiveBayesTrainer trainer = new DiscreteNaiveBayesTrainer()
+            .setBucketThresholds(binarizedDatathresholds)
+            .setPriorProbabilities(priorProbabilities);
+
+        DiscreteNaiveBayesModel model = trainer.fit(
+            new LocalDatasetBuilder<>(binarizedData, parts),
+            (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
+            (k, v) -> v[v.length - 1]
+        );
+
+        Assert.assertArrayEquals(priorProbabilities, model.getClsProbabilities(), PRECISION);
+    }
+
+    /** */
+    @Test
+    public void testReturnsCorrectPriorProbabilities() {
+        double[][][] expectedPriorProbabilites = new double[][][] {
+            {{.5, .5}, {.5, .5}, {2. / 3., 1. / 3.}, {.5, .5}, {.5, .5}},
+            {{0, 1}, {3. / 7, 4. / 7}, {4. / 7, 3. / 7}, {2. / 7, 5. / 7}, {4. / 7, 3. / 7,}}
+        };
+
+        DiscreteNaiveBayesModel model = trainer.fit(
+            new LocalDatasetBuilder<>(binarizedData, parts),
+            (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
+            (k, v) -> v[v.length - 1]
+        );
+
+        for (int i = 0; i < expectedPriorProbabilites.length; i++) {
+            for (int j = 0; j < expectedPriorProbabilites[i].length; j++) {
+                Assert.assertArrayEquals(expectedPriorProbabilites[i][j], model.getProbabilities()[i][j], PRECISION);
+            }
+        }
+    }
+
+    /** */
+    @Test
+    public void testReturnsCorrectPriorProbabilitiesWithDefferentThresholds() {
+        double[][][] expectedPriorProbabilites = new double[][][] {
+            {
+                {4. / 8, 2. / 8, 2. / 8},
+                {.5, .5},
+                {1. / 8, 3. / 8, 2. / 8, 2. / 8},
+                {1. / 8, 2. / 8, 2. / 8, 3. / 8}},
+            {
+                {2. / 4, 1. / 4, 1. / 4},
+                {1. / 4, 3. / 4},
+                {1. / 4, 0, 2. / 4, 1. / 4},
+                {2. / 4, 1. / 4, 1. / 4, 0}}
+        };
+
+        DiscreteNaiveBayesModel model = trainer
+            .setBucketThresholds(thresholds)
+            .fit(
+                new LocalDatasetBuilder<>(data, parts),
+                (k, v) -> VectorUtils.of(Arrays.copyOfRange(v, 0, v.length - 1)),
+                (k, v) -> v[v.length - 1]
+            );
+
+        for (int i = 0; i < expectedPriorProbabilites.length; i++) {
+            for (int j = 0; j < expectedPriorProbabilites[i].length; j++) {
+                Assert.assertArrayEquals(expectedPriorProbabilites[i][j], model.getProbabilities()[i][j], PRECISION);
+            }
+        }
+    }
+
+}


[12/52] [abbrv] ignite git commit: IGNITE-10239 Fix wide nav menu top margin.

Posted by sb...@apache.org.
IGNITE-10239 Fix wide nav menu top margin.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/0eb5bcc6
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/0eb5bcc6
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/0eb5bcc6

Branch: refs/heads/ignite-627
Commit: 0eb5bcc6989721d389a67be7880118313e02975b
Parents: 871126c
Author: Ilya Borisov <kl...@gmail.com>
Authored: Tue Dec 18 10:19:02 2018 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Tue Dec 18 10:19:02 2018 +0700

----------------------------------------------------------------------
 .../web-console-sidebar-navigation/style.scss               | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/0eb5bcc6/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
index 83c21a3..b9c3e68 100644
--- a/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
+++ b/modules/web-console/frontend/app/components/web-console-sidebar/web-console-sidebar-navigation/style.scss
@@ -72,6 +72,11 @@ web-console-sidebar-navigation {
             display: none;
         }
     }
+
+    li:first-of-type > .web-console-sidebar-navigation__link-wide {
+        margin-top: 18px;        
+    }
+
     .web-console-sidebar-navigation__link-wide {
         color: #393939;
         text-decoration: none !important;
@@ -82,10 +87,6 @@ web-console-sidebar-navigation {
         display: inline-flex;
         align-items: center;
 
-        &:first-of-type {
-            margin-top: 18px;
-        }
-
         &:hover, &:focus {
             color: var(--active-link-color);
 


[33/52] [abbrv] ignite git commit: IGNITE-10709 New inspections introduced in 2018+ IntelliJ IDEA version were disabled on TC configuration, unused Suppress removal. - Fixes #5680.

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java
index 26c61d5..4e2fef2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinResultSet.java
@@ -1752,7 +1752,6 @@ public class JdbcThinResultSet implements ResultSet {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Result set is not a wrapper for " + iface.getName());
@@ -1766,7 +1765,6 @@ public class JdbcThinResultSet implements ResultSet {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T getObject(int colIdx, Class<T> targetCls) throws SQLException {
         return (T)getObject0(colIdx, targetCls);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinStatement.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinStatement.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinStatement.java
index 98b970c..be25201 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinStatement.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc/thin/JdbcThinStatement.java
@@ -802,7 +802,6 @@ public class JdbcThinStatement implements Statement {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Statement is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
index 96e4554..896deb7 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcConnection.java
@@ -768,7 +768,6 @@ public class JdbcConnection implements Connection {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Connection is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
index 20cf0d3..663c988 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcDatabaseMetadata.java
@@ -1363,7 +1363,6 @@ public class JdbcDatabaseMetadata implements DatabaseMetaData {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Database meta data is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
index 43fb755..f3fc160 100755
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSet.java
@@ -1752,7 +1752,6 @@ public class JdbcResultSet implements ResultSet {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Result set is not a wrapper for " + iface.getName());
@@ -1835,7 +1834,6 @@ public class JdbcResultSet implements ResultSet {
      * @return Object field value.
      * @throws SQLException In case of error.
      */
-    @SuppressWarnings("unchecked")
     private Object getValue(int colIdx) throws SQLException {
         ensureNotClosed();
         ensureHasCurrentRow();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSetMetadata.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSetMetadata.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSetMetadata.java
index ce8c269..42392a8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSetMetadata.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcResultSetMetadata.java
@@ -156,7 +156,6 @@ public class JdbcResultSetMetadata implements ResultSetMetaData {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Result set meta data is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
index f87c162..5700a65 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/jdbc2/JdbcStatement.java
@@ -600,7 +600,6 @@ public class JdbcStatement implements Statement {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> iface) throws SQLException {
         if (!isWrapperFor(iface))
             throw new SQLException("Statement is not a wrapper for " + iface.getName());

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
index 491baa2..09c7b96 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/communication/GridIoManager.java
@@ -257,7 +257,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("deprecation")
     @Override public void start() throws IgniteCheckedException {
         startSpi();
 
@@ -722,10 +721,9 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"deprecation", "SynchronizationOnLocalVariableOrMethodParameter"})
+    @SuppressWarnings({"SynchronizationOnLocalVariableOrMethodParameter"})
     @Override public void onKernalStart0() throws IgniteCheckedException {
         discoLsnr = new GridLocalEventListener() {
-            @SuppressWarnings({"TooBroadScope"})
             @Override public void onEvent(Event evt) {
                 assert evt instanceof DiscoveryEvent : "Invalid event: " + evt;
 
@@ -1182,7 +1180,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param msg Message.
      * @param nodeId Node ID.
      */
-    @SuppressWarnings("deprecation")
     private void processRegularMessage0(GridIoMessage msg, UUID nodeId) {
         GridMessageListener lsnr = listenerGet0(msg.topic());
 
@@ -1695,7 +1692,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param plc Type of processing.
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    @SuppressWarnings("TypeMayBeWeakened")
     public void sendToGridTopic(UUID nodeId, GridTopic topic, Message msg, byte plc)
         throws IgniteCheckedException {
         ClusterNode node = ctx.discovery().node(nodeId);
@@ -1982,7 +1978,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param topic Topic to subscribe to.
      * @param p Message predicate.
      */
-    @SuppressWarnings("unchecked")
     public void addUserMessageListener(@Nullable final Object topic, @Nullable final IgniteBiPredicate<UUID, ?> p) {
         if (p != null) {
             try {
@@ -2004,7 +1999,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param topic Topic to unsubscribe from.
      * @param p Message predicate.
      */
-    @SuppressWarnings("unchecked")
     public void removeUserMessageListener(@Nullable Object topic, IgniteBiPredicate<UUID, ?> p) {
         try {
             removeMessageListener(TOPIC_COMM_USER,
@@ -2019,7 +2013,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param topic Listener's topic.
      * @param lsnr Listener to add.
      */
-    @SuppressWarnings({"TypeMayBeWeakened", "deprecation"})
     public void addMessageListener(GridTopic topic, GridMessageListener lsnr) {
         addMessageListener((Object)topic, lsnr);
     }
@@ -2042,7 +2035,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param topic Listener's topic.
      * @param lsnr Listener to add.
      */
-    @SuppressWarnings({"deprecation"})
     public void addMessageListener(Object topic, final GridMessageListener lsnr) {
         assert lsnr != null;
         assert topic != null;
@@ -2133,7 +2125,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param lsnr Listener to remove.
      * @return Whether or not the lsnr was removed.
      */
-    @SuppressWarnings("deprecation")
     public boolean removeMessageListener(GridTopic topic, @Nullable GridMessageListener lsnr) {
         return removeMessageListener((Object)topic, lsnr);
     }
@@ -2143,7 +2134,6 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
      * @param lsnr Listener to remove.
      * @return Whether or not the lsnr was removed.
      */
-    @SuppressWarnings({"deprecation"})
     public boolean removeMessageListener(Object topic, @Nullable GridMessageListener lsnr) {
         assert topic != null;
 
@@ -2443,8 +2433,8 @@ public class GridIoManager extends GridManagerAdapter<CommunicationSpi<Serializa
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings({"ConstantConditions",
-            "OverlyStrongTypeCast"})
+        @SuppressWarnings({"ConstantConditions"
+        })
         @Override public void onMessage(UUID nodeId, Object msg, byte plc) {
             if (!(msg instanceof GridIoUserMessage)) {
                 U.error(log, "Received unknown message (potentially fatal problem): " + msg);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
index 9b486e9..e93066c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeployment.java
@@ -338,7 +338,6 @@ public class GridDeployment extends GridMetadataAwareAdapter implements GridDepl
      * @return Annotation value.
      * @param <T> Annotation class.
      */
-    @SuppressWarnings("unchecked")
     public <T extends Annotation> T annotation(Class<?> cls, Class<T> annCls) {
         ConcurrentMap<Class<? extends Annotation>, GridTuple<Annotation>> clsAnns = anns.get(cls);
 
@@ -368,7 +367,6 @@ public class GridDeployment extends GridMetadataAwareAdapter implements GridDepl
      * @param taskCls Task class.
      * @return {@code True} if task is internal.
      */
-    @SuppressWarnings("unchecked")
     public boolean internalTask(@Nullable ComputeTask task, Class<?> taskCls) {
         assert taskCls != null;
 
@@ -392,7 +390,6 @@ public class GridDeployment extends GridMetadataAwareAdapter implements GridDepl
      * @param taskCls Task class.
      * @return {@code True} if task is internal.
      */
-    @SuppressWarnings("unchecked")
     public boolean visorManagementTask(@Nullable ComputeTask task, @NotNull Class<?> taskCls) {
         return annotation(task instanceof GridPeerDeployAware ?
                 ((GridPeerDeployAware)task).deployClass() : taskCls,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
index b27cc4b..10f0695 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/deployment/GridDeploymentLocalStore.java
@@ -430,7 +430,6 @@ class GridDeploymentLocalStore extends GridDeploymentStoreAdapter {
      * @param clsLdr Class loader.
      * @param recordEvt Flag indicating whether to record events.
      */
-    @SuppressWarnings({"unchecked"})
     private void recordDeployFailed(Class<?> cls, ClassLoader clsLdr, boolean recordEvt) {
         assert cls != null;
         assert clsLdr != null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
index e1ea031..5af3495 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/managers/eventstorage/GridEventStorageManager.java
@@ -413,7 +413,6 @@ public class GridEventStorageManager extends GridManagerAdapter<EventStorageSpi>
      *
      * @param types Events to disable.
      */
-    @SuppressWarnings("deprecation")
     public synchronized void disableEvents(int[] types) {
         assert types != null;
 
@@ -887,7 +886,6 @@ public class GridEventStorageManager extends GridManagerAdapter<EventStorageSpi>
      * @param p Grid event predicate.
      * @return Collection of grid events.
      */
-    @SuppressWarnings("unchecked")
     public <T extends Event> Collection<T> localEvents(IgnitePredicate<T> p) throws IgniteCheckedException {
         assert p != null;
 
@@ -949,7 +947,6 @@ public class GridEventStorageManager extends GridManagerAdapter<EventStorageSpi>
      * @return Collection of events.
      * @throws IgniteCheckedException Thrown in case of any errors.
      */
-    @SuppressWarnings({"deprecation"})
     private <T extends Event> List<T> query(IgnitePredicate<T> p, Collection<? extends ClusterNode> nodes,
         long timeout) throws IgniteCheckedException {
         assert p != null;
@@ -988,7 +985,6 @@ public class GridEventStorageManager extends GridManagerAdapter<EventStorageSpi>
         };
 
         GridMessageListener resLsnr = new GridMessageListener() {
-            @SuppressWarnings("deprecation")
             @Override public void onMessage(UUID nodeId, Object msg, byte plc) {
                 assert nodeId != null;
                 assert msg != null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
index 66461de..afcabce 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
@@ -212,7 +212,6 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected <T> T unmarshal0(InputStream in, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
         assert in != null;
 
@@ -242,7 +241,6 @@ public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override protected <T> T unmarshal0(byte[] arr, @Nullable ClassLoader clsLdr) throws IgniteCheckedException {
         assert arr != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
index 2c87c75..2311439 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
@@ -385,7 +385,6 @@ class OptimizedObjectInputStream extends ObjectInputStream {
      * @throws ClassNotFoundException If class not found.
      * @throws IOException In case of error.
      */
-    @SuppressWarnings("unchecked")
     <T> T[] readArray(Class<T> compType) throws ClassNotFoundException, IOException {
         int len = in.readInt();
 
@@ -678,7 +677,6 @@ class OptimizedObjectInputStream extends ObjectInputStream {
      * @throws ClassNotFoundException If class not found.
      * @throws IOException In case of error.
      */
-    @SuppressWarnings("unchecked")
     HashSet<?> readHashSet(long mapFieldOff) throws ClassNotFoundException, IOException {
         try {
             HashSet<Object> set = (HashSet<Object>)GridUnsafe.allocateInstance(HashSet.class);
@@ -750,7 +748,6 @@ class OptimizedObjectInputStream extends ObjectInputStream {
      * @throws ClassNotFoundException If class not found.
      * @throws IOException In case of error.
      */
-    @SuppressWarnings("unchecked")
     LinkedHashSet<?> readLinkedHashSet(long mapFieldOff) throws ClassNotFoundException, IOException {
         try {
             LinkedHashSet<Object> set = (LinkedHashSet<Object>)GridUnsafe.allocateInstance(LinkedHashSet.class);
@@ -1252,7 +1249,6 @@ class OptimizedObjectInputStream extends ObjectInputStream {
          * @param dflt Default value.
          * @return Value.
          */
-        @SuppressWarnings("unchecked")
         private <T> T value(String name, T dflt) {
             return objs[fieldInfo.getIndex(name)] != null ? (T)objs[fieldInfo.getIndex(name)] : dflt;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
index 07beb14..30bf113 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/affinity/GridAffinityProcessor.java
@@ -559,7 +559,6 @@ public class GridAffinityProcessor extends GridProcessorAdapter {
      * @return Affinity map.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings({"unchecked"})
     private <K> Map<ClusterNode, Collection<K>> affinityMap(AffinityInfo aff, Collection<? extends K> keys)
         throws IgniteCheckedException {
         assert aff != null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/IgniteAuthenticationProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/IgniteAuthenticationProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/IgniteAuthenticationProcessor.java
index c7c5885..98f4201 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/IgniteAuthenticationProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/authentication/IgniteAuthenticationProcessor.java
@@ -383,7 +383,6 @@ public class IgniteAuthenticationProcessor extends GridProcessorAdapter implemen
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void onReadyForRead(ReadOnlyMetastorage metastorage) throws IgniteCheckedException {
         if (!ctx.clientNode()) {
             users = new ConcurrentHashMap<>();
@@ -1309,7 +1308,6 @@ public class IgniteAuthenticationProcessor extends GridProcessorAdapter implemen
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override protected void body() throws InterruptedException, IgniteInterruptedCheckedException {
             if (ctx.clientNode())
                 return;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl.java
index 60eba21..5ba15da 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl.java
@@ -79,7 +79,6 @@ public class CacheEntryImpl<K, V> implements Cache.Entry<K, V>, Externalizable {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> cls) {
         if (cls.isAssignableFrom(getClass()))
             return cls.cast(this);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl0.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl0.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl0.java
index 1e97f0c..bce4e92 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl0.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEntryImpl0.java
@@ -47,7 +47,6 @@ public class CacheEntryImpl0<K, V> implements Cache.Entry<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> cls) {
         if(cls.isAssignableFrom(getClass()))
             return cls.cast(this);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java
index 89f06dc..1de5906 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheEvictableEntryImpl.java
@@ -197,7 +197,6 @@ public class CacheEvictableEntryImpl<K, V> implements EvictableEntry<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> clazz) {
         if (clazz.isAssignableFrom(IgniteCache.class))
             return (T)cached.context().grid().cache(cached.context().name());
@@ -214,7 +213,6 @@ public class CacheEvictableEntryImpl<K, V> implements EvictableEntry<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public boolean equals(Object obj) {
         if (obj == this)
             return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java
index dddc735..44a51ec 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeEntry.java
@@ -170,7 +170,6 @@ public class CacheInvokeEntry<K, V> extends CacheLazyEntry<K, V> implements Muta
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> cls) {
         if (cls.isAssignableFrom(CacheEntry.class) && ver != null)
             return (T)new CacheEntryImplEx<>(getKey(), getValue(), ver);

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
index 2e6d64a..7c0f256 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheInvokeResult.java
@@ -119,7 +119,6 @@ public class CacheInvokeResult<T> implements EntryProcessorResult<T>, Externaliz
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         res = (T)in.readObject();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java
index 4463dc8..1a1645f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheLazyEntry.java
@@ -143,7 +143,6 @@ public class CacheLazyEntry<K, V> extends CacheInterceptorEntry<K, V> {
      * @param keepBinary Flag to keep binary if needed.
      * @return the value corresponding to this entry
      */
-    @SuppressWarnings("unchecked")
     public V getValue(boolean keepBinary) {
         if (val == null)
             val = (V)cctx.unwrapBinaryIfNeeded(valObj, keepBinary, true);
@@ -187,7 +186,6 @@ public class CacheLazyEntry<K, V> extends CacheInterceptorEntry<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> cls) {
         if (cls.isAssignableFrom(Ignite.class))
             return (T)cctx.kernalContext().grid();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
index b29c19e..6ca700b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectImpl.java
@@ -54,7 +54,6 @@ public class CacheObjectImpl extends CacheObjectAdapter {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T value(CacheObjectValueContext ctx, boolean cpy) {
         cpy = cpy && needCopy(ctx);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
index aeca79e..ed2d324 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectUtils.java
@@ -162,7 +162,6 @@ public class CacheObjectUtils {
      * @param o Object to unwrap.
      * @return Unwrapped object.
      */
-    @SuppressWarnings("unchecked")
     private static Object unwrapBinary(CacheObjectValueContext ctx, Object o, boolean keepBinary, boolean cpy) {
         if (o == null)
             return o;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CachePartialUpdateCheckedException.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CachePartialUpdateCheckedException.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CachePartialUpdateCheckedException.java
index 9d2686c..220d642 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CachePartialUpdateCheckedException.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CachePartialUpdateCheckedException.java
@@ -48,7 +48,6 @@ public class CachePartialUpdateCheckedException extends IgniteCheckedException {
      * Gets collection of failed keys.
      * @return Collection of failed keys.
      */
-    @SuppressWarnings("unchecked")
     public synchronized <K> Collection<K> failedKeys() {
         return new LinkedHashSet<>((Collection<K>)failedKeys);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
index 4d93726..a1c403b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAdapter.java
@@ -485,7 +485,6 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked", "RedundantCast"})
     @Override public final <K1, V1> IgniteInternalCache<K1, V1> cache() {
         return (IgniteInternalCache<K1, V1>)this;
     }
@@ -1712,7 +1711,6 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
      * @param map Result map.
      * @return Map with values returned by cache interceptor..
      */
-    @SuppressWarnings("IfMayBeConditional")
     private Map<K, V> interceptGet(@Nullable Collection<? extends K> keys, Map<K, V> map) {
         if (F.isEmpty(keys))
             return map;
@@ -1753,7 +1751,6 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
      * @param map Result map.
      * @return Map with values returned by cache interceptor..
      */
-    @SuppressWarnings("IfMayBeConditional")
     private Collection<CacheEntry<K, V>> interceptGetEntries(
         @Nullable Collection<? extends K> keys, Map<K, EntryGetResult> map) {
         if (F.isEmpty(keys)) {
@@ -3135,7 +3132,6 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void removeAll() throws IgniteCheckedException {
         assert ctx.isLocal();
 
@@ -4213,7 +4209,7 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
      * @return Operation result.
      * @throws IgniteCheckedException If operation failed.
      */
-    @SuppressWarnings({"TypeMayBeWeakened", "ErrorNotRethrown", "AssignmentToCatchBlockParameter"})
+    @SuppressWarnings({"ErrorNotRethrown", "AssignmentToCatchBlockParameter"})
     @Nullable private <T> T syncOp(SyncOp<T> op) throws IgniteCheckedException {
         checkJta();
 
@@ -6219,7 +6215,6 @@ public abstract class GridCacheAdapter<K, V> implements IgniteInternalCache<K, V
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
             p = (IgniteBiPredicate<K, V>)in.readObject();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index 426a29c..19c01b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -1889,7 +1889,6 @@ public class GridCacheContext<K, V> implements Externalizable {
      * @param cpy Copy flag.
      * @param ver GridCacheVersion.
      */
-    @SuppressWarnings("unchecked")
     public <K1, V1> void addResult(Map<K1, V1> map,
         KeyCacheObject key,
         CacheObject val,
@@ -1915,7 +1914,6 @@ public class GridCacheContext<K, V> implements Externalizable {
      * @param cpy Copy flag.
      * @param needVer Need version flag.
      */
-    @SuppressWarnings("unchecked")
     public <K1, V1> void addResult(Map<K1, V1> map,
         KeyCacheObject key,
         EntryGetResult getRes,
@@ -1943,7 +1941,6 @@ public class GridCacheContext<K, V> implements Externalizable {
      * @param ttl Entry TTL.
      * @param needVer Need version flag.
      */
-    @SuppressWarnings("unchecked")
     public <K1, V1> void addResult(Map<K1, V1> map,
         KeyCacheObject key,
         CacheObject val,
@@ -1991,7 +1988,6 @@ public class GridCacheContext<K, V> implements Externalizable {
      * @param needVer Need version flag.
      * @return EntryGetResult or value.
      */
-    @SuppressWarnings("unchecked")
     private <V1> V1 createValue(final GridCacheVersion ver,
         final long expireTime,
         final long ttl,

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionManager.java
index a1bf0ff..5a3453a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheEvictionManager.java
@@ -357,7 +357,6 @@ public class GridCacheEvictionManager extends GridCacheManagerAdapter implements
      * @param near Near flag.
      * @throws IgniteCheckedException If registration failed.
      */
-    @SuppressWarnings("unchecked")
     private void registerMbean(Object obj, @Nullable String cacheName, boolean near)
         throws IgniteCheckedException {
         if (U.IGNITE_MBEANS_DISABLED)

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
index 2f29ffb..710931f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheIoManager.java
@@ -543,7 +543,6 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("BusyWait")
     @Override protected void onKernalStop0(boolean cancel) {
         cctx.gridIO().removeMessageListener(TOPIC_CACHE);
 
@@ -569,7 +568,6 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
      * @param c Handler closure.
      * @param plc Message policy.
      */
-    @SuppressWarnings({"ConstantConditions"})
     private void onMessage0(final UUID nodeId, final GridCacheMessage cacheMsg,
         final IgniteBiInClosure<UUID, GridCacheMessage> c, byte plc) {
         try {
@@ -1405,7 +1403,6 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
      * @param c Handler.
      * @param msgHandlers Message handlers.
      */
-    @SuppressWarnings({"unchecked"})
     private void addHandler(
         int hndId,
         Class<? extends GridCacheMessage> type,
@@ -1537,7 +1534,6 @@ public class GridCacheIoManager extends GridCacheSharedManagerAdapter {
      * @param topic Topic.
      * @param c Handler.
      */
-    @SuppressWarnings({"unchecked"})
     private void addOrderedHandler(GridCacheSharedContext cctx, boolean cacheGrp, Object topic, IgniteBiInClosure<UUID, ? extends GridCacheMessage> c) {
         MessageHandlers msgHandlers = cacheGrp ? grpHandlers : cacheHandlers;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
index b5f9dfc..881e868 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMapEntry.java
@@ -615,7 +615,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
      * @return Read value.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings({"RedundantTypeArguments"})
     @Nullable protected Object readThrough(@Nullable IgniteInternalTx tx, KeyCacheObject key, boolean reload, UUID subjId,
         String taskName) throws IgniteCheckedException {
         return cctx.store().load(tx, key);
@@ -710,7 +709,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked", "RedundantTypeArguments", "TooBroadScope"})
+    @SuppressWarnings({"TooBroadScope"})
     private Object innerGet0(
         GridCacheVersion nextVer,
         IgniteInternalTx tx,
@@ -979,7 +978,7 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked", "TooBroadScope"})
+    @SuppressWarnings({"TooBroadScope"})
     @Nullable @Override public final CacheObject innerReload()
         throws IgniteCheckedException, GridCacheEntryRemovedException {
         CU.checkStore(cctx);
@@ -3306,7 +3305,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"RedundantTypeArguments"})
     @Override public boolean initialValue(
         CacheObject val,
         GridCacheVersion ver,
@@ -4148,7 +4146,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"IfMayBeConditional"})
     @Override public long expireTime() throws GridCacheEntryRemovedException {
         IgniteTxLocalAdapter tx = currentTx();
 
@@ -4172,7 +4169,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"IfMayBeConditional"})
     @Override public long ttl() throws GridCacheEntryRemovedException {
         IgniteTxLocalAdapter tx = currentTx();
 
@@ -4419,7 +4415,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K, V> Cache.Entry<K, V> wrap() {
         try {
             IgniteInternalTx tx = cctx.tm().userTx();
@@ -5308,7 +5303,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public void apply(IgniteInternalFuture lockFut) {
             WALPointer logPtr = null;
             boolean valid;
@@ -5666,13 +5660,11 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public V getValue() {
             return (V)cctx.cacheObjectContext().unwrapBinaryIfNeeded(peekVisibleValue(), keepBinary, true);
         }
 
         /** {@inheritDoc} */
-        @SuppressWarnings("unchecked")
         @Override public <T> T unwrap(Class<T> cls) {
             if (cls.isAssignableFrom(IgniteCache.class))
                 return (T)cctx.grid().cache(cctx.name());
@@ -6687,7 +6679,6 @@ public abstract class GridCacheMapEntry extends GridMetadataAwareAdapter impleme
          * @param invokeEntry Entry for {@link EntryProcessor}.
          * @return Entry processor return value.
          */
-        @SuppressWarnings("unchecked")
         private IgniteBiTuple<Object, Exception> runEntryProcessor(CacheInvokeEntry<Object, Object> invokeEntry) {
             EntryProcessor<Object, Object, ?> entryProcessor = (EntryProcessor<Object, Object, ?>)writeObj;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
index 0281631..bd2b58d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheMvccManager.java
@@ -154,7 +154,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
     @GridToStringExclude
     private final GridCacheLockCallback cb = new GridCacheLockCallback() {
         /** {@inheritDoc} */
-        @SuppressWarnings({"unchecked"})
         @Override public void onOwnerChanged(final GridCacheEntryEx entry, final GridCacheMvccCandidate owner) {
             int nested = nestedLsnrCalls.get();
 
@@ -719,7 +718,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      * @param futId Future ID.
      * @return Future.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public GridCacheVersionedFuture<?> versionedFuture(GridCacheVersion ver, IgniteUuid futId) {
         Collection<GridCacheVersionedFuture<?>> futs = this.verFuts.get(ver);
 
@@ -748,7 +746,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      * @param ver Lock ID.
      * @return Futures.
      */
-    @SuppressWarnings({"unchecked"})
     @Nullable public Collection<GridCacheVersionedFuture<?>> futuresForVersion(GridCacheVersion ver) {
         Collection<GridCacheVersionedFuture<?>> futs = this.verFuts.get(ver);
 
@@ -1073,7 +1070,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      * @param topVer Topology version.
      * @return Future that signals when all locks for given partitions are released.
      */
-    @SuppressWarnings({"unchecked"})
     public IgniteInternalFuture<?> finishLocks(AffinityTopologyVersion topVer) {
         assert topVer.compareTo(AffinityTopologyVersion.ZERO) > 0;
         return finishLocks(null, topVer);
@@ -1143,7 +1139,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      *
      * @return Finish update future.
      */
-    @SuppressWarnings("unchecked")
     public IgniteInternalFuture<?> finishDataStreamerUpdates(AffinityTopologyVersion topVer) {
         GridCompoundFuture<Void, Object> res = new CacheObjectsReleaseFuture<>("DataStreamer", topVer);
 
@@ -1163,7 +1158,6 @@ public class GridCacheMvccManager extends GridCacheSharedManagerAdapter {
      * @param topVer Topology version.
      * @return Future that signals when all locks for given keys are released.
      */
-    @SuppressWarnings("unchecked")
     public IgniteInternalFuture<?> finishKeys(Collection<KeyCacheObject> keys,
         final int cacheId,
         AffinityTopologyVersion topVer) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index 5bd9eb8..6ab5cfe 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -4533,7 +4533,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @param <V> type of values.
      * @return Cache instance for given name.
      */
-    @SuppressWarnings("unchecked")
     public <K, V> IgniteInternalCache<K, V> cache(String name) {
         assert name != null;
 
@@ -4608,7 +4607,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @return Cache instance for given name.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public <K, V> IgniteInternalCache<K, V> getOrStartCache(
         String name,
         CacheConfiguration ccfg
@@ -4698,7 +4696,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @param <V> type of values.
      * @return Cache instance for given name.
      */
-    @SuppressWarnings("unchecked")
     public <K, V> IgniteInternalCache<K, V> publicCache(String name) {
         assert name != null;
 
@@ -4740,7 +4737,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @return Cache instance for given name.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings({"unchecked", "ConstantConditions"})
     @Nullable public <K, V> IgniteCacheProxy<K, V> publicJCache(String cacheName,
         boolean failIfNotStarted,
         boolean checkThreadTx) throws IgniteCheckedException {
@@ -4966,7 +4962,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @param <V> type of values.
      * @return Cache instance for given name.
      */
-    @SuppressWarnings("unchecked")
     public <K, V> GridCacheAdapter<K, V> internalCache(String name) {
         assert name != null;
 
@@ -5065,7 +5060,6 @@ public class GridCacheProcessor extends GridProcessorAdapter {
      * @param near Near flag.
      * @throws IgniteCheckedException If registration failed.
      */
-    @SuppressWarnings("unchecked")
     private void registerMbean(Object obj, @Nullable String cacheName, boolean near)
         throws IgniteCheckedException {
         if (U.IGNITE_MBEANS_DISABLED)

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java
index fa9f3cb..94eb857 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProxyImpl.java
@@ -299,7 +299,6 @@ public class GridCacheProxyImpl<K, V> implements IgniteInternalCache<K, V>, Exte
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <K1, V1> GridCacheProxyImpl<K1, V1> keepBinary() {
         if (opCtx != null && opCtx.isKeepBinary())
             return (GridCacheProxyImpl<K1, V1>)this;
@@ -1625,7 +1624,6 @@ public class GridCacheProxyImpl<K, V> implements IgniteInternalCache<K, V>, Exte
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         ctx = (GridCacheContext<K, V>)in.readObject();
         delegate = (IgniteInternalCache<K, V>)in.readObject();

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
index 22aa425..0762dfc 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheReturn.java
@@ -122,7 +122,6 @@ public class GridCacheReturn implements Externalizable, Message {
     /**
      * @return Value.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <V> V value() {
         return (V)v;
     }
@@ -221,7 +220,6 @@ public class GridCacheReturn implements Externalizable, Message {
      * @param err Error.
      * @param keepBinary Keep binary.
      */
-    @SuppressWarnings("unchecked")
     public synchronized void addEntryProcessResult(
         GridCacheContext cctx,
         KeyCacheObject key,
@@ -288,7 +286,6 @@ public class GridCacheReturn implements Externalizable, Message {
     /**
      * @param other Other result to merge with.
      */
-    @SuppressWarnings("unchecked")
     public synchronized void mergeEntryProcessResults(GridCacheReturn other) {
         assert invokeRes || v == null : "Invalid state to merge: " + this;
         assert other.invokeRes;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtilityKey.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtilityKey.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtilityKey.java
index affa6ce..3d66950 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtilityKey.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtilityKey.java
@@ -27,7 +27,6 @@ public abstract class GridCacheUtilityKey<K extends GridCacheUtilityKey> impleme
     private static final long serialVersionUID = 0L;
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public final boolean equals(Object obj) {
         return obj == this || obj != null && obj.getClass() == getClass() && equalsx((K)obj);
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
index ebc1d11..bf1c359 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheUtils.java
@@ -455,7 +455,6 @@ public class GridCacheUtils {
      */
     public static <K, V> IgniteClosure<Integer, IgnitePredicate<Cache.Entry<K, V>>[]> factory() {
         return new IgniteClosure<Integer, IgnitePredicate<Cache.Entry<K, V>>[]>() {
-            @SuppressWarnings({"unchecked"})
             @Override public IgnitePredicate<Cache.Entry<K, V>>[] apply(Integer len) {
                 return (IgnitePredicate<Cache.Entry<K, V>>[])(len == 0 ? EMPTY : new IgnitePredicate[len]);
             }
@@ -527,7 +526,6 @@ public class GridCacheUtils {
     /**
      * @return Empty filter.
      */
-    @SuppressWarnings({"unchecked"})
     public static <K, V> IgnitePredicate<Cache.Entry<K, V>>[] empty() {
         return (IgnitePredicate<Cache.Entry<K, V>>[])EMPTY_FILTER;
     }
@@ -535,7 +533,6 @@ public class GridCacheUtils {
     /**
      * @return Empty filter.
      */
-    @SuppressWarnings({"unchecked"})
     public static CacheEntryPredicate[] empty0() {
         return EMPTY_FILTER0;
     }
@@ -550,7 +547,6 @@ public class GridCacheUtils {
     /**
      * @return Closure which converts transaction entry xid to XID version.
      */
-    @SuppressWarnings( {"unchecked"})
     public static IgniteClosure<IgniteInternalTx, GridCacheVersion> tx2xidVersion() {
         return (IgniteClosure<IgniteInternalTx, GridCacheVersion>)tx2xidVer;
     }
@@ -566,7 +562,6 @@ public class GridCacheUtils {
     /**
      * @return Closure that converts entry info to key.
      */
-    @SuppressWarnings({"unchecked"})
     public static <K, V> IgniteClosure<GridCacheEntryInfo, K> info2Key() {
         return (IgniteClosure<GridCacheEntryInfo, K>)info2key;
     }
@@ -793,7 +788,6 @@ public class GridCacheUtils {
      * @return Buffer that contains obtained byte array.
      * @throws IgniteCheckedException If marshalling failed.
      */
-    @SuppressWarnings("unchecked")
     public static byte[] marshal(GridCacheContext ctx, Object obj)
         throws IgniteCheckedException {
         assert ctx != null;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
index 5997f57..0976f63 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheOffheapManagerImpl.java
@@ -664,7 +664,6 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override @Nullable public CacheDataRow read(GridCacheMapEntry entry)
         throws IgniteCheckedException {
         KeyCacheObject key = entry.key();
@@ -763,7 +762,6 @@ public class IgniteCacheOffheapManagerImpl implements IgniteCacheOffheapManager
      *
      * @param readers {@code True} to clear readers.
      */
-    @SuppressWarnings("unchecked")
     @Override public void clearCache(GridCacheContext cctx, boolean readers) {
         GridCacheVersion obsoleteVer = null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
index ccf5cb4..886dac5 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java
@@ -73,14 +73,12 @@ public interface IgniteCacheProxy<K, V> extends IgniteCache<K, V>, Externalizabl
      *
      * @return Projection for binary objects.
      */
-    @SuppressWarnings("unchecked")
     public <K1, V1> IgniteCache<K1, V1> keepBinary();
 
     /**
      * @param dataCenterId Data center ID.
      * @return Projection for data center id.
      */
-    @SuppressWarnings("unchecked")
     public IgniteCache<K, V> withDataCenterId(byte dataCenterId);
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
index 504c375..a6a1fc1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxyImpl.java
@@ -661,7 +661,6 @@ public class IgniteCacheProxyImpl<K, V> extends AsyncSupportAdapter<IgniteCache<
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <R> QueryCursor<R> query(Query<R> qry) {
         A.notNull(qry, "qry");
         try {
@@ -1628,7 +1627,6 @@ public class IgniteCacheProxyImpl<K, V> extends AsyncSupportAdapter<IgniteCache<
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T unwrap(Class<T> clazz) {
         if (clazz.isAssignableFrom(getClass()))
             return (T)this;
@@ -1862,7 +1860,6 @@ public class IgniteCacheProxyImpl<K, V> extends AsyncSupportAdapter<IgniteCache<
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         ctx = (GridCacheContext<K, V>)in.readObject();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
index 1f4e790..92e8a4f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/KeyCacheObjectImpl.java
@@ -93,7 +93,6 @@ public class KeyCacheObjectImpl extends CacheObjectAdapter implements KeyCacheOb
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public <T> T value(CacheObjectValueContext ctx, boolean cpy) {
         assert val != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityProxy.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityProxy.java
index 07ca3cc..c6b5a60 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityProxy.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/affinity/GridCacheAffinityProxy.java
@@ -251,7 +251,6 @@ public class GridCacheAffinityProxy<K, V> implements Affinity<K>, Externalizable
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
         cctx = (GridCacheContext<K, V>)in.readObject();
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
index 0a1e887..7b6b4ab 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
@@ -409,7 +409,6 @@ public class CacheObjectBinaryProcessorImpl extends GridProcessorAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public Object marshalToBinary(
         @Nullable Object obj,
         boolean failIfUnregistered
@@ -786,7 +785,6 @@ public class CacheObjectBinaryProcessorImpl extends GridProcessorAdapter impleme
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public Collection<BinaryType> metadata() throws BinaryObjectException {
         return F.viewReadOnly(metadataLocCache.values(), new IgniteClosure<BinaryMetadataHolder, BinaryType>() {
             @Override public BinaryType apply(BinaryMetadataHolder metaHolder) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
index 0ee8a0c..0fc1b9f 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
@@ -61,7 +61,6 @@ public class IgniteBinaryImpl implements IgniteBinary {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public <T> T toBinary(@Nullable Object obj) throws BinaryObjectException {
         guard();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
index 9c3c4a6..8c44852 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/datastructures/CacheDataStructuresManager.java
@@ -224,7 +224,6 @@ public class CacheDataStructuresManager extends GridCacheManagerAdapter {
      * @return Queue header.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     @Nullable public <T> GridCacheQueueProxy<T> queue(final String name,
         final int cap,
         boolean colloc,
@@ -423,7 +422,6 @@ public class CacheDataStructuresManager extends GridCacheManagerAdapter {
      * @param topVer Topology version.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     private void removeSetData(IgniteUuid setId, AffinityTopologyVersion topVer) throws IgniteCheckedException {
         boolean loc = cctx.isLocal();
 
@@ -465,7 +463,6 @@ public class CacheDataStructuresManager extends GridCacheManagerAdapter {
      * @param separated Separated cache flag.
      * @throws IgniteCheckedException If failed.
      */
-    @SuppressWarnings("unchecked")
     public void removeSetData(IgniteUuid id, boolean separated) throws IgniteCheckedException {
         assert id != null;
 
@@ -557,7 +554,6 @@ public class CacheDataStructuresManager extends GridCacheManagerAdapter {
     /**
      * @param setId Set ID.
      */
-    @SuppressWarnings("unchecked")
     private void blockSet(IgniteUuid setId) {
         GridCacheSetProxy set = setsMap.remove(setId);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/CacheDistributedGetFutureAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/CacheDistributedGetFutureAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/CacheDistributedGetFutureAdapter.java
index feea264..da6d8f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/CacheDistributedGetFutureAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/CacheDistributedGetFutureAdapter.java
@@ -354,7 +354,6 @@ public abstract class CacheDistributedGetFutureAdapter<K, V>
     /** {@inheritDoc} */
     @Override public String toString() {
         Collection<String> futuresStrings = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() {
-            @SuppressWarnings("unchecked")
             @Override public String apply(IgniteInternalFuture<?> f) {
                 if (isMini(f)) {
                     AbstractMiniFuture mini = (AbstractMiniFuture)f;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
index 611c87c..58b12ed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheAdapter.java
@@ -1101,7 +1101,7 @@ public abstract class GridDhtCacheAdapter<K, V> extends GridDistributedCacheAdap
     public void sendTtlUpdateRequest(@Nullable final IgniteCacheExpiryPolicy expiryPlc) {
         if (expiryPlc != null && expiryPlc.entries() != null) {
             ctx.closures().runLocalSafe(new Runnable() {
-                @SuppressWarnings({"unchecked", "ForLoopReplaceableByForEach"})
+                @SuppressWarnings({"ForLoopReplaceableByForEach"})
                 @Override public void run() {
                     Map<KeyCacheObject, GridCacheVersion> entries = expiryPlc.entries();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
index 8eea5a3..a1eb01c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
@@ -544,7 +544,6 @@ public class GridDhtCacheEntry extends GridDistributedCacheEntry {
      * @return {@code True} if reader was removed as a result of this operation.
      * @throws GridCacheEntryRemovedException If entry was removed.
      */
-    @SuppressWarnings("unchecked")
     public boolean removeReader(UUID nodeId, long msgId) throws GridCacheEntryRemovedException {
         lockEntry();
 
@@ -587,7 +586,6 @@ public class GridDhtCacheEntry extends GridDistributedCacheEntry {
     /**
      * Clears all readers (usually when partition becomes invalid and ready for eviction).
      */
-    @SuppressWarnings("unchecked")
     @Override public void clearReaders() {
         lockEntry();
 
@@ -699,7 +697,7 @@ public class GridDhtCacheEntry extends GridDistributedCacheEntry {
      * @return Collection of readers after check.
      * @throws GridCacheEntryRemovedException If removed.
      */
-    @SuppressWarnings({"unchecked", "ManualArrayToCollectionCopy"})
+    @SuppressWarnings({"ManualArrayToCollectionCopy"})
     protected Collection<ReaderId> checkReadersLocked() throws GridCacheEntryRemovedException {
         assert lockedByCurrentThread();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
index 9361b30..ef2e70d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
@@ -574,7 +574,6 @@ public final class GridDhtLockFuture extends GridCacheCompoundIdentityFuture<Boo
      * @param miniId Mini ID to find.
      * @return Mini future.
      */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     private MiniFuture miniFuture(IgniteUuid miniId) {
         // We iterate directly over the futs collection here to avoid copy.
         synchronized (this) {
@@ -1354,7 +1353,6 @@ public final class GridDhtLockFuture extends GridCacheCompoundIdentityFuture<Boo
          * @param msgId Message ID.
          * @param entries Entries to check.
          */
-        @SuppressWarnings({"ForLoopReplaceableByForEach"})
         private void evictReaders(GridCacheContext<?, ?> cacheCtx, Collection<IgniteTxKey> keys, UUID nodeId, long msgId,
             @Nullable List<GridDhtCacheEntry> entries) {
             if (entries == null || keys == null || entries.isEmpty() || keys.isEmpty())

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
index ea1c58d..2864712 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxAbstractEnlistFuture.java
@@ -160,7 +160,6 @@ public abstract class GridDhtTxAbstractEnlistFuture<T> extends GridCacheFutureAd
     private Object peek;
 
     /** */
-    @SuppressWarnings({"FieldCanBeLocal"})
     @GridToStringExclude
     private volatile int skipCntr;
 
@@ -788,7 +787,6 @@ public abstract class GridDhtTxAbstractEnlistFuture<T> extends GridCacheFutureAd
      * @param backups Backup nodes.
      * @return {@code True} if there is possible to add this key to batch or send ready batch.
      */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     private boolean ensureFreeSlot(KeyCacheObject key, List<ClusterNode> backups) {
         if (F.isEmpty(batches) || F.isEmpty(pending))
             return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
index a9c133a..6c83700 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxFinishFuture.java
@@ -136,7 +136,6 @@ public final class GridDhtTxFinishFuture<K, V> extends GridCacheCompoundIdentity
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public boolean onNodeLeft(UUID nodeId) {
         for (IgniteInternalFuture<?> fut : futures())
             if (isMini(fut)) {
@@ -614,7 +613,6 @@ public final class GridDhtTxFinishFuture<K, V> extends GridCacheCompoundIdentity
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public void addDiagnosticRequest(IgniteDiagnosticPrepareContext ctx) {
         if (!isDone()) {
             for (IgniteInternalFuture fut : futures()) {
@@ -657,7 +655,6 @@ public final class GridDhtTxFinishFuture<K, V> extends GridCacheCompoundIdentity
     /** {@inheritDoc} */
     @Override public String toString() {
         Collection<String> futs = F.viewReadOnly(futures(), new C1<IgniteInternalFuture<?>, String>() {
-            @SuppressWarnings("unchecked")
             @Override public String apply(IgniteInternalFuture<?> f) {
                 if (f.getClass() == MiniFuture.class) {
                     return "[node=" + ((MiniFuture)f).node().id() +

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
index 53c4942..c83681c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxLocal.java
@@ -539,7 +539,6 @@ public class GridDhtTxLocal extends GridDhtTxLocalAdapter implements GridCacheMa
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public IgniteInternalFuture<IgniteInternalTx> commitAsync() {
         return commitDhtLocalAsync();
     }
@@ -663,7 +662,6 @@ public class GridDhtTxLocal extends GridDhtTxLocalAdapter implements GridCacheMa
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Nullable @Override public IgniteInternalFuture<?> currentPrepareFuture() {
         return prepFut;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
index 58edc9d..2e46d2b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtTxPrepareFuture.java
@@ -1035,7 +1035,6 @@ public final class GridDhtTxPrepareFuture extends GridCacheCompoundFuture<Ignite
      *
      * @param req Prepare request.
      */
-    @SuppressWarnings("TypeMayBeWeakened")
     public void prepare(GridNearTxPrepareRequest req) {
         assert req != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxQueryEnlistResultHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxQueryEnlistResultHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxQueryEnlistResultHandler.java
index 2058377..00289ca 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxQueryEnlistResultHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxQueryEnlistResultHandler.java
@@ -56,7 +56,6 @@ public final class NearTxQueryEnlistResultHandler implements CI1<IgniteInternalF
      * @param future Enlist future.
      * @return Enlist response.
      */
-    @SuppressWarnings("unchecked")
     public static <T extends GridNearTxQueryEnlistResponse> T createResponse(IgniteInternalFuture<?> future) {
         assert future != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxResultHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxResultHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxResultHandler.java
index 0bc00e1..1332b09 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxResultHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/NearTxResultHandler.java
@@ -57,7 +57,6 @@ public final class NearTxResultHandler implements CI1<IgniteInternalFuture<GridC
      * @param future Enlist future.
      * @return Enlist response.
      */
-    @SuppressWarnings("unchecked")
     public static <T> T createResponse(IgniteInternalFuture<?> future) {
         assert future != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
index 51dae50..ab4287e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridDhtAtomicCache.java
@@ -224,7 +224,6 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"IfMayBeConditional"})
     @Override public void start() throws IgniteCheckedException {
         super.start();
 
@@ -2730,7 +2729,6 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
      * @param expiry Expiry policy.
      * @param sndPrevVal If {@code true} sends previous value to backups.
      */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     @Nullable private void updatePartialBatch(
         final boolean hasNear,
         final int firstEntryIdx,
@@ -2984,7 +2982,6 @@ public class GridDhtAtomicCache<K, V> extends GridDhtCacheAdapter<K, V> {
      * @throws GridDhtInvalidPartitionException If entry does not belong to local node. If exception is thrown, locks
      * are released.
      */
-    @SuppressWarnings("ForLoopReplaceableByForEach")
     private List<GridDhtCacheEntry> lockEntries(GridNearAtomicAbstractUpdateRequest req, AffinityTopologyVersion topVer)
         throws GridDhtInvalidPartitionException {
         if (req.size() == 1) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
index 170586b..08aa469 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicFullUpdateRequest.java
@@ -267,7 +267,6 @@ public class GridNearAtomicFullUpdateRequest extends GridNearAtomicAbstractUpdat
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public CacheObject value(int idx) {
         assert op == UPDATE : op;
 
@@ -275,7 +274,6 @@ public class GridNearAtomicFullUpdateRequest extends GridNearAtomicAbstractUpdat
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings("unchecked")
     @Override public EntryProcessor<Object, Object, Object> entryProcessor(int idx) {
         assert op == TRANSFORM : op;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/ad9d5610/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
index 486a6e0..d4e81e0 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicSingleUpdateFuture.java
@@ -222,7 +222,6 @@ public class GridNearAtomicSingleUpdateFuture extends GridNearAtomicAbstractUpda
     }
 
     /** {@inheritDoc} */
-    @SuppressWarnings({"unchecked"})
     @Override public void onPrimaryResponse(UUID nodeId, GridNearAtomicUpdateResponse res, boolean nodeErr) {
         GridNearAtomicAbstractUpdateRequest req;
 


[49/52] [abbrv] ignite git commit: IGNITE-9893 IGNITE-1757 IGNITE-10723 Adding hibernate-5.3 module

Posted by sb...@apache.org.
IGNITE-9893 IGNITE-1757 IGNITE-10723 Adding hibernate-5.3 module

This change is based on the hibernate-5.1 module

updates to the module:
* added ability to allow for caches to be lazily loaded and created as a result
  of post-bootstrap scanning.  The module defaults to the same behavior as
  the hibernate-5.1 module.
    1. added org.apache.ignite.hibernate.verify_atomicity - relaxes the cache
       atomicMode check
    2. HibernateCacheProxy - now accepts a Supplier which lazily loads the
       Ignite caches after the SPI is initialized
    3. added org.apache.ignite.hibernate.cache_prefix - prepends all cache names
       when a cache is looked up in ignite
    4. removed dflt cache as ignite 2.x does not recommend mixed classes in one cache
* all tests now pass as a result of fixing a couple bugs including IGNITE-1757 - Fixes #5008.

Signed-off-by: Ilya Kasnacheev <il...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/272858db
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/272858db
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/272858db

Branch: refs/heads/ignite-627
Commit: 272858dbc8b462f8bd345e3490d3767040379b5f
Parents: 9a1a830
Author: scottmf <sc...@gmail.com>
Authored: Wed Dec 19 17:04:28 2018 +0300
Committer: Ilya Kasnacheev <il...@gmail.com>
Committed: Wed Dec 19 19:03:59 2018 +0300

----------------------------------------------------------------------
 .../hibernate/CacheHibernateBlobStore.java      |    6 +-
 .../config/factory-incorrect-store-cache.xml    |    4 +
 .../HibernateL2CacheConfigurationSelfTest.java  |   17 -
 .../hibernate/HibernateL2CacheMultiJvmTest.java |   28 +-
 .../CacheHibernateBlobStoreSelfTest.java        |    4 -
 .../CacheHibernateStoreFactorySelfTest.java     |    2 -
 .../hibernate/CacheHibernateBlobStore.java      |    6 +-
 .../config/factory-incorrect-store-cache.xml    |    4 +
 .../HibernateL2CacheConfigurationSelfTest.java  |   17 -
 .../hibernate/HibernateL2CacheMultiJvmTest.java |   27 +-
 .../CacheHibernateBlobStoreSelfTest.java        |    4 -
 .../CacheHibernateStoreFactorySelfTest.java     |    4 +-
 modules/hibernate-5.3/licenses/apache-2.0.txt   |  202 ++
 modules/hibernate-5.3/pom.xml                   |  183 ++
 .../cache/hibernate/HibernateKeyWrapper.java    |  109 +
 .../ignite/cache/hibernate/HibernateRegion.java |   74 +
 .../cache/hibernate/HibernateRegionFactory.java |  154 ++
 .../hibernate/IgniteCachedDomainDataAccess.java |  121 ++
 .../hibernate/IgniteCollectionDataAccess.java   |   61 +
 .../cache/hibernate/IgniteDomainDataRegion.java |  182 ++
 .../cache/hibernate/IgniteEntityDataAccess.java |   80 +
 .../hibernate/IgniteGeneralDataRegion.java      |   89 +
 .../hibernate/IgniteNaturalIdDataAccess.java    |   80 +
 .../hibernate/IgniteQueryResultsRegion.java     |   70 +
 .../cache/hibernate/IgniteTimestampsRegion.java |   39 +
 .../ignite/cache/hibernate/package-info.java    |   24 +
 .../hibernate/CacheHibernateBlobStore.java      |  545 +++++
 .../hibernate/CacheHibernateBlobStoreEntry.java |   89 +
 .../CacheHibernateBlobStoreFactory.java         |  235 +++
 .../CacheHibernateStoreSessionListener.java     |  226 ++
 .../cache/store/hibernate/package-info.java     |   22 +
 .../CacheHibernateBlobStoreEntry.hbm.xml        |   31 +
 .../src/test/config/factory-cache.xml           |   59 +
 .../src/test/config/factory-cache1.xml          |   61 +
 .../config/factory-incorrect-store-cache.xml    |   60 +
 .../HibernateL2CacheConfigurationSelfTest.java  |  409 ++++
 .../hibernate/HibernateL2CacheMultiJvmTest.java |  441 ++++
 .../hibernate/HibernateL2CacheSelfTest.java     | 1991 ++++++++++++++++++
 .../HibernateL2CacheStrategySelfTest.java       |  570 +++++
 .../HibernateL2CacheTransactionalSelfTest.java  |  154 ++
 ...nateL2CacheTransactionalUseSyncSelfTest.java |   31 +
 .../CacheHibernateBlobStoreNodeRestartTest.java |   46 +
 .../CacheHibernateBlobStoreSelfTest.java        |  118 ++
 .../CacheHibernateStoreFactorySelfTest.java     |  336 +++
 ...heHibernateStoreSessionListenerSelfTest.java |  242 +++
 .../cache/store/hibernate/hibernate.cfg.xml     |   41 +
 .../cache/store/hibernate/package-info.java     |   22 +
 .../IgniteBinaryHibernate53TestSuite.java       |   37 +
 .../testsuites/IgniteHibernate53TestSuite.java  |   61 +
 .../cache/store/hibernate/hibernate.cfg.xml     |   41 +
 .../HibernateAccessStrategyAdapter.java         |   18 +-
 .../HibernateAccessStrategyFactory.java         |  144 +-
 .../cache/hibernate/HibernateCacheProxy.java    |  266 +--
 .../HibernateNonStrictAccessStrategy.java       |    8 +-
 .../HibernateReadOnlyAccessStrategy.java        |    8 +-
 .../HibernateReadWriteAccessStrategy.java       |   40 +-
 .../HibernateTransactionalAccessStrategy.java   |   26 +-
 pom.xml                                         |    2 +
 58 files changed, 7703 insertions(+), 268 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-4.2/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java b/modules/hibernate-4.2/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
index c87f08f..6658100 100644
--- a/modules/hibernate-4.2/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
+++ b/modules/hibernate-4.2/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
@@ -92,6 +92,9 @@ public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
     /** Default <tt>hibernate.hbm2ddl.auto</tt> property value (value is <tt>true</tt>). */
     public static final String DFLT_HBM2DDL_AUTO = "update";
 
+    /** Default <tt>hibernate.connection.pool_size</tt> property value (value is <tt>64</tt>). */
+    public static final String DFLT_CONN_POOL_SIZE = "64";
+
     /** Session attribute name. */
     private static final String ATTR_SES = "HIBERNATE_STORE_SESSION";
 
@@ -426,6 +429,7 @@ public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
                         hibernateProps.setProperty("hibernate.connection.url", DFLT_CONN_URL);
                         hibernateProps.setProperty("hibernate.show_sql", DFLT_SHOW_SQL);
                         hibernateProps.setProperty("hibernate.hbm2ddl.auto", DFLT_HBM2DDL_AUTO);
+                        hibernateProps.setProperty("hibernate.connection.pool_size", DFLT_CONN_POOL_SIZE);
                     }
 
                     Configuration cfg = new Configuration();
@@ -539,4 +543,4 @@ public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
     private CacheStoreSession session() {
         return ses;
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-4.2/src/test/config/factory-incorrect-store-cache.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/test/config/factory-incorrect-store-cache.xml b/modules/hibernate-4.2/src/test/config/factory-incorrect-store-cache.xml
index 459930c..4de9fc9 100644
--- a/modules/hibernate-4.2/src/test/config/factory-incorrect-store-cache.xml
+++ b/modules/hibernate-4.2/src/test/config/factory-incorrect-store-cache.xml
@@ -23,6 +23,10 @@
         http://www.springframework.org/schema/beans/spring-beans.xsd">
 
     <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <property name="failureHandler">
+            <bean class="org.apache.ignite.failure.NoOpFailureHandler"/>
+        </property>
+
         <property name="cacheConfiguration">
             <list>
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
index eb09c59..59b58c4 100644
--- a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
+++ b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
@@ -47,7 +47,6 @@ import org.junit.runners.JUnit4;
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_ACCESS_TYPE_PROPERTY;
-import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_CACHE_NAME_PROPERTY;
 import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.IGNITE_INSTANCE_NAME_PROPERTY;
 import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.REGION_CACHE_PROPERTY;
 import static org.hibernate.cfg.AvailableSettings.CACHE_REGION_FACTORY;
@@ -83,9 +82,6 @@ public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTes
     /** */
     public static final String CONNECTION_URL = "jdbc:h2:mem:example;DB_CLOSE_DELAY=-1";
 
-    /** If {@code true} then sets default cache in configuration. */
-    private boolean dfltCache;
-
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         startGrid(0);
@@ -163,9 +159,6 @@ public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTes
         cfg.setProperty(REGION_CACHE_PROPERTY + TIMESTAMP_CACHE, TIMESTAMP_CACHE);
         cfg.setProperty(REGION_CACHE_PROPERTY + QUERY_CACHE, QUERY_CACHE);
 
-        if (dfltCache)
-            cfg.setProperty(DFLT_CACHE_NAME_PROPERTY, "cache3");
-
         return cfg;
     }
 
@@ -178,16 +171,6 @@ public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTes
     }
 
     /**
-     * Tests property {@link HibernateAccessStrategyFactory#DFLT_CACHE_NAME_PROPERTY}.
-     */
-    @Test
-    public void testDefaultCache() {
-        dfltCache = true;
-
-        testCacheUsage(1, 1, 2, 0, 0);
-    }
-
-    /**
      * @param expCache1 Expected size of cache with name 'cache1'.
      * @param expCache2 Expected size of cache with name 'cache2'.
      * @param expCache3 Expected size of cache with name 'cache3'.

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
index 43c54b2..e88962a 100644
--- a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
+++ b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
@@ -40,8 +40,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_CACHE_NAME_PROPERTY;
 import static org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest.CONNECTION_URL;
 import static org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest.hibernateProperties;
 import static org.hibernate.cache.spi.access.AccessType.NONSTRICT_READ_WRITE;
@@ -52,7 +53,7 @@ import static org.hibernate.cache.spi.access.AccessType.NONSTRICT_READ_WRITE;
 @RunWith(JUnit4.class)
 public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
     /** */
-    private static final String CACHE_NAME = "hibernateCache";
+    private static final String TIMESTAMP_CACHE = "org.hibernate.cache.spi.UpdateTimestampsCache";
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
@@ -61,12 +62,12 @@ public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
         if (!getTestIgniteInstanceName(0).equals(igniteInstanceName))
             cfg.setClientMode(true);
 
-        CacheConfiguration ccfg = new CacheConfiguration();
-
-        ccfg.setName(CACHE_NAME);
-        ccfg.setWriteSynchronizationMode(FULL_SYNC);
-
-        cfg.setCacheConfiguration(ccfg);
+        cfg.setCacheConfiguration(
+            cacheConfiguration(TIMESTAMP_CACHE),
+            cacheConfiguration(Entity1.class.getName()),
+            cacheConfiguration(Entity2.class.getName()),
+            cacheConfiguration(Entity3.class.getName())
+        );
 
         cfg.setMarshaller(new BinaryMarshaller());
 
@@ -75,6 +76,15 @@ public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
         return cfg;
     }
 
+    private CacheConfiguration cacheConfiguration(String cacheName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+        cfg.setName(cacheName);
+        cfg.setCacheMode(PARTITIONED);
+        cfg.setAtomicityMode(ATOMIC);
+        cfg.setWriteSynchronizationMode(FULL_SYNC);
+        return cfg;
+    }
+
     /** {@inheritDoc} */
     @Override protected boolean isMultiJvm() {
         return true;
@@ -246,8 +256,6 @@ public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
             for (Map.Entry<String, String> e : hibernateProperties(nodeName, NONSTRICT_READ_WRITE.name()).entrySet())
                 cfg.setProperty(e.getKey(), e.getValue());
 
-            cfg.setProperty(DFLT_CACHE_NAME_PROPERTY, CACHE_NAME);
-
             return cfg;
         }
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
index 77025a1..f1b88d4 100644
--- a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
+++ b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
@@ -106,8 +106,4 @@ public class CacheHibernateBlobStoreSelfTest extends
         // Store will be implicitly initialized.
         store.load("key");
     }
-
-    @Override public void testSimpleMultithreading() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-1757");
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
index e115551..a0663f3 100644
--- a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
+++ b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
@@ -90,8 +90,6 @@ public class CacheHibernateStoreFactorySelfTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncorrectBeanConfiguration() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
-
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
                 try(Ignite ignite =

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.1/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java b/modules/hibernate-5.1/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
index 6e546b0..461af92 100644
--- a/modules/hibernate-5.1/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
+++ b/modules/hibernate-5.1/src/main/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStore.java
@@ -93,6 +93,9 @@ public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
     /** Default <tt>hibernate.hbm2ddl.auto</tt> property value (value is <tt>true</tt>). */
     public static final String DFLT_HBM2DDL_AUTO = "update";
 
+    /** Default <tt>hibernate.connection.pool_size</tt> property value (value is <tt>64</tt>). */
+    public static final String DFLT_CONN_POOL_SIZE = "64";
+
     /** Session attribute name. */
     private static final String ATTR_SES = "HIBERNATE_STORE_SESSION";
 
@@ -427,6 +430,7 @@ public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
                         hibernateProps.setProperty("hibernate.connection.url", DFLT_CONN_URL);
                         hibernateProps.setProperty("hibernate.show_sql", DFLT_SHOW_SQL);
                         hibernateProps.setProperty("hibernate.hbm2ddl.auto", DFLT_HBM2DDL_AUTO);
+                        hibernateProps.setProperty("hibernate.connection.pool_size", DFLT_CONN_POOL_SIZE);
                     }
 
                     Configuration cfg = new Configuration();
@@ -540,4 +544,4 @@ public class CacheHibernateBlobStore<K, V> extends CacheStoreAdapter<K, V> {
     private CacheStoreSession session() {
         return ses;
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.1/src/test/config/factory-incorrect-store-cache.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/test/config/factory-incorrect-store-cache.xml b/modules/hibernate-5.1/src/test/config/factory-incorrect-store-cache.xml
index 459930c..4de9fc9 100644
--- a/modules/hibernate-5.1/src/test/config/factory-incorrect-store-cache.xml
+++ b/modules/hibernate-5.1/src/test/config/factory-incorrect-store-cache.xml
@@ -23,6 +23,10 @@
         http://www.springframework.org/schema/beans/spring-beans.xsd">
 
     <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+        <property name="failureHandler">
+            <bean class="org.apache.ignite.failure.NoOpFailureHandler"/>
+        </property>
+
         <property name="cacheConfiguration">
             <list>
                 <bean class="org.apache.ignite.configuration.CacheConfiguration">

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
index f828d04..e8282b1 100644
--- a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
+++ b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheConfigurationSelfTest.java
@@ -46,7 +46,6 @@ import org.junit.runners.JUnit4;
 
 import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
 import static org.apache.ignite.cache.CacheMode.PARTITIONED;
-import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_CACHE_NAME_PROPERTY;
 import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.REGION_CACHE_PROPERTY;
 import static org.hibernate.cfg.AvailableSettings.CACHE_REGION_FACTORY;
 import static org.hibernate.cfg.AvailableSettings.GENERATE_STATISTICS;
@@ -81,9 +80,6 @@ public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTes
     /** */
     public static final String CONNECTION_URL = "jdbc:h2:mem:example;DB_CLOSE_DELAY=-1";
 
-    /** If {@code true} then sets default cache in configuration. */
-    private boolean dfltCache;
-
     /** {@inheritDoc} */
     @Override protected void beforeTestsStarted() throws Exception {
         startGrid(0);
@@ -160,9 +156,6 @@ public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTes
         cfg.setProperty(REGION_CACHE_PROPERTY + TIMESTAMP_CACHE, TIMESTAMP_CACHE);
         cfg.setProperty(REGION_CACHE_PROPERTY + QUERY_CACHE, QUERY_CACHE);
 
-        if (dfltCache)
-            cfg.setProperty(DFLT_CACHE_NAME_PROPERTY, "cache3");
-
         return cfg;
     }
 
@@ -175,16 +168,6 @@ public class HibernateL2CacheConfigurationSelfTest extends GridCommonAbstractTes
     }
 
     /**
-     * Tests property {@link HibernateAccessStrategyFactory#DFLT_CACHE_NAME_PROPERTY}.
-     */
-    @Test
-    public void testDefaultCache() {
-        dfltCache = true;
-
-        testCacheUsage(1, 1, 2, 0, 0);
-    }
-
-    /**
      * @param expCache1 Expected size of cache with name 'cache1'.
      * @param expCache2 Expected size of cache with name 'cache2'.
      * @param expCache3 Expected size of cache with name 'cache3'.

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
index b3da8bb..e712484 100644
--- a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
+++ b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/hibernate/HibernateL2CacheMultiJvmTest.java
@@ -40,8 +40,9 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
+import static org.apache.ignite.cache.CacheMode.PARTITIONED;
 import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
-import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_CACHE_NAME_PROPERTY;
 import static org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest.CONNECTION_URL;
 import static org.apache.ignite.cache.hibernate.HibernateL2CacheSelfTest.hibernateProperties;
 import static org.hibernate.cache.spi.access.AccessType.NONSTRICT_READ_WRITE;
@@ -52,7 +53,7 @@ import static org.hibernate.cache.spi.access.AccessType.NONSTRICT_READ_WRITE;
 @RunWith(JUnit4.class)
 public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
     /** */
-    private static final String CACHE_NAME = "hibernateCache";
+    private static final String TIMESTAMP_CACHE = "org.hibernate.cache.spi.UpdateTimestampsCache";
 
     /** {@inheritDoc} */
     @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
@@ -61,12 +62,12 @@ public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
         if (!getTestIgniteInstanceName(0).equals(igniteInstanceName))
             cfg.setClientMode(true);
 
-        CacheConfiguration ccfg = new CacheConfiguration();
-
-        ccfg.setName(CACHE_NAME);
-        ccfg.setWriteSynchronizationMode(FULL_SYNC);
-
-        cfg.setCacheConfiguration(ccfg);
+        cfg.setCacheConfiguration(
+            cacheConfiguration(TIMESTAMP_CACHE),
+            cacheConfiguration(Entity1.class.getName()),
+            cacheConfiguration(Entity2.class.getName()),
+            cacheConfiguration(Entity3.class.getName())
+        );
 
         cfg.setMarshaller(new BinaryMarshaller());
 
@@ -75,6 +76,15 @@ public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
         return cfg;
     }
 
+    private CacheConfiguration cacheConfiguration(String cacheName) {
+        CacheConfiguration cfg = new CacheConfiguration();
+        cfg.setName(cacheName);
+        cfg.setCacheMode(PARTITIONED);
+        cfg.setAtomicityMode(ATOMIC);
+        cfg.setWriteSynchronizationMode(FULL_SYNC);
+        return cfg;
+    }
+
     /** {@inheritDoc} */
     @Override protected boolean isMultiJvm() {
         return true;
@@ -229,7 +239,6 @@ public class HibernateL2CacheMultiJvmTest extends GridCommonAbstractTest {
                 builder.applySetting(e.getKey(), e.getValue());
 
             builder.applySetting("hibernate.connection.url", CONNECTION_URL);
-            builder.applySetting(DFLT_CACHE_NAME_PROPERTY, CACHE_NAME);
 
             MetadataSources metadataSources = new MetadataSources(builder.build());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
index 9deaeec..83dd6e8 100644
--- a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
+++ b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateBlobStoreSelfTest.java
@@ -115,8 +115,4 @@ public class CacheHibernateBlobStoreSelfTest extends
         store.load("key");
     }
 
-    @Test
-    @Override public void testSimpleMultithreading() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-1757");
-    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
index 86a058b..f1ea2be 100644
--- a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
+++ b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
@@ -90,11 +90,9 @@ public class CacheHibernateStoreFactorySelfTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncorrectBeanConfiguration() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
-
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
-                try(Ignite ignite =
+                try (Ignite ignite =
                     Ignition.start(MODULE_PATH + "/src/test/config/factory-incorrect-store-cache.xml")) {
                     ignite.cache(CACHE_NAME).getConfiguration(CacheConfiguration.class).
                             getCacheStoreFactory().create();

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/licenses/apache-2.0.txt
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/licenses/apache-2.0.txt b/modules/hibernate-5.3/licenses/apache-2.0.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/modules/hibernate-5.3/licenses/apache-2.0.txt
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/pom.xml
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/pom.xml b/modules/hibernate-5.3/pom.xml
new file mode 100644
index 0000000..9e87de5
--- /dev/null
+++ b/modules/hibernate-5.3/pom.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--
+    POM file.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.ignite</groupId>
+        <artifactId>ignite-parent</artifactId>
+        <version>1</version>
+        <relativePath>../../parent</relativePath>
+    </parent>
+
+    <artifactId>ignite-hibernate_5.3</artifactId>
+    <version>2.7.0-SNAPSHOT</version>
+    <url>http://ignite.apache.org</url>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-hibernate-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>5.3.7.Final</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-jta</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.ow2.jotm</groupId>
+            <artifactId>jotm-core</artifactId>
+            <version>2.1.9</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-dbcp</groupId>
+            <artifactId>commons-dbcp</artifactId>
+            <version>1.4</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.h2database</groupId>
+            <artifactId>h2</artifactId>
+            <version>${h2.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>javax.resource</groupId>
+            <artifactId>connector-api</artifactId>
+            <version>1.5</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-core</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-spring</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-log4j</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>${spring.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.thoughtworks.xstream</groupId>
+            <artifactId>xstream</artifactId>
+            <version>1.4.8</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <profiles>
+        <profile>
+            <id>lgpl</id>
+            <build>
+                <plugins>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-deploy-plugin</artifactId>
+                        <configuration>
+                            <skip>false</skip>
+                        </configuration>
+                    </plugin>
+                </plugins>
+            </build>
+        </profile>
+    </profiles>
+
+    <build>
+        <testResources>
+            <testResource>
+                <directory>src/main/java</directory>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </testResource>
+            <testResource>
+                <directory>src/test/java</directory>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </testResource>
+        </testResources>
+
+        <plugins>
+            <!-- Generate the OSGi MANIFEST.MF for this bundle. -->
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+</project>

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateKeyWrapper.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateKeyWrapper.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateKeyWrapper.java
new file mode 100644
index 0000000..45d00e4
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateKeyWrapper.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.io.Serializable;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.hibernate.cache.internal.DefaultCacheKeysFactory;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.persister.collection.CollectionPersister;
+import org.hibernate.persister.entity.EntityPersister;
+
+/**
+ * Hibernate cache key wrapper.
+ */
+public class HibernateKeyWrapper implements Serializable {
+    /** Key. */
+    private final Object key;
+
+    /** Entry. */
+    private final String entry;
+
+    /** */
+    private final String tenantId;
+
+    /**
+     * @param key Key.
+     * @param entry Entry.
+     * @param tenantId Tenant ID.
+     */
+    HibernateKeyWrapper(Object key, String entry, String tenantId) {
+        this.key = key;
+        this.entry = entry;
+        this.tenantId = tenantId;
+    }
+
+    /**
+     * @return ID.
+     */
+    Object id() {
+        return key;
+    }
+
+    /**
+     * @param id ID.
+     * @param persister Persister.
+     * @param tenantIdentifier Tenant ID.
+     * @return Cache key.
+     * @see DefaultCacheKeysFactory#staticCreateCollectionKey(Object, CollectionPersister, SessionFactoryImplementor, String)
+     */
+    static Object staticCreateCollectionKey(Object id,
+        CollectionPersister persister,
+        String tenantIdentifier) {
+        return new HibernateKeyWrapper(id, persister.getRole(), tenantIdentifier);
+    }
+
+    /**
+     * @param id ID.
+     * @param persister Persister.
+     * @param tenantIdentifier Tenant ID.
+     * @return Cache key.
+     * @see DefaultCacheKeysFactory#staticCreateEntityKey(Object, EntityPersister, SessionFactoryImplementor, String)
+     */
+    public static Object staticCreateEntityKey(Object id, EntityPersister persister, String tenantIdentifier) {
+        return new HibernateKeyWrapper(id, persister.getRootEntityName(), tenantIdentifier);
+    }
+
+
+    /** {@inheritDoc} */
+    @Override public boolean equals(Object o) {
+        if (this == o) return true;
+
+        if (o == null || getClass() != o.getClass())
+            return false;
+
+        HibernateKeyWrapper that = (HibernateKeyWrapper) o;
+
+        return (key != null ? key.equals(that.key) : that.key == null) &&
+            (entry != null ? entry.equals(that.entry) : that.entry == null) &&
+            (tenantId != null ? tenantId.equals(that.tenantId) : that.tenantId == null);
+    }
+
+    /** {@inheritDoc} */
+    @Override public int hashCode() {
+        int res = key != null ? key.hashCode() : 0;
+        res = 31 * res + (entry != null ? entry.hashCode() : 0);
+        res = 31 * res + (tenantId != null ? tenantId.hashCode() : 0);
+        return res;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(HibernateKeyWrapper.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegion.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegion.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegion.java
new file mode 100644
index 0000000..184196e
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegion.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCheckedException;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.spi.ExtendedStatisticsSupport;
+import org.hibernate.cache.spi.Region;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.support.AbstractRegion;
+
+/**
+ * Implementation of {@link Region}. This interface defines base contract for all L2 cache regions.
+ */
+public abstract class HibernateRegion extends AbstractRegion implements ExtendedStatisticsSupport {
+    /** Cache instance. */
+    protected final HibernateCacheProxy cache;
+
+    /** Grid instance. */
+    protected Ignite ignite;
+
+    /** */
+    protected HibernateRegion(RegionFactory factory, String name, Ignite ignite, HibernateCacheProxy cache) {
+        super(name, factory);
+
+        this.ignite = ignite;
+        this.cache = cache;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void clear() {
+        try {
+            cache.clear();
+        } catch (IgniteCheckedException e) {
+            throw new CacheException("Problem clearing cache [name=" + cache.name() + "]", e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void destroy() throws CacheException {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getElementCountInMemory() {
+        return cache.offHeapEntriesCount();
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getElementCountOnDisk() {
+        return cache.sizeLong();
+    }
+
+    /** {@inheritDoc} */
+    @Override public long getSizeInMemory() {
+        return cache.offHeapAllocatedSize();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegionFactory.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegionFactory.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegionFactory.java
new file mode 100644
index 0000000..b47cb74
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/HibernateRegionFactory.java
@@ -0,0 +1,154 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import java.time.Instant;
+import java.util.Map;
+import org.apache.ignite.internal.processors.cache.IgniteInternalCache;
+import org.hibernate.boot.spi.SessionFactoryOptions;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.cfg.spi.DomainDataRegionBuildingContext;
+import org.hibernate.cache.cfg.spi.DomainDataRegionConfig;
+import org.hibernate.cache.spi.DomainDataRegion;
+import org.hibernate.cache.spi.QueryResultsRegion;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.TimestampsRegion;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cache.spi.support.RegionNameQualifier;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+
+import static org.apache.ignite.cache.hibernate.HibernateAccessStrategyFactory.DFLT_ACCESS_TYPE_PROPERTY;
+import static org.hibernate.cache.spi.access.AccessType.NONSTRICT_READ_WRITE;
+
+/**
+ * Hibernate L2 cache region factory.
+ * <p>
+ * Following Hibernate settings should be specified to enable second level cache and to use this
+ * region factory for caching:
+ * <pre name="code" class="brush: xml; gutter: false;">
+ * hibernate.cache.use_second_level_cache=true
+ * hibernate.cache.region.factory_class=org.apache.ignite.cache.hibernate.HibernateRegionFactory
+ * </pre>
+ * Note that before region factory is started you need to start properly configured Ignite node in the same JVM.
+ * For example to start Ignite node one of loader provided in {@code org.apache.ignite.grid.startup} package can be used.
+ * <p>
+ * Name of Ignite instance to be used for region factory must be specified as following Hibernate property:
+ * <pre name="code" class="brush: xml; gutter: false;">
+ * org.apache.ignite.hibernate.ignite_instance_name=&lt;Ignite instance name&gt;
+ * </pre>
+ * Each Hibernate cache region must be associated with some {@link IgniteInternalCache}, by default it is assumed that
+ * for each cache region there is a {@link IgniteInternalCache} with the same name. Also it is possible to define
+ * region to cache mapping using properties with prefix {@code org.apache.ignite.hibernate.region_cache}.
+ * For example if for region with name "region1" cache with name "cache1" should be used then following
+ * Hibernate property should be specified:
+ * <pre name="code" class="brush: xml; gutter: false;">
+ * org.apache.ignite.hibernate.region_cache.region1=cache1
+ * </pre>
+ */
+public class HibernateRegionFactory implements RegionFactory {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** */
+    static final HibernateExceptionConverter EXCEPTION_CONVERTER = new HibernateExceptionConverter() {
+        @Override public RuntimeException convert(Exception e) {
+            return new CacheException(e);
+        }
+    };
+
+    /** Default region access type. */
+    private AccessType dfltAccessType;
+
+    /** Key transformer. */
+    private final HibernateKeyTransformer hibernate4transformer = new HibernateKeyTransformer() {
+        @Override public Object transform(Object key) {
+            return key;
+        }
+    };
+
+    /** */
+    private final HibernateAccessStrategyFactory accessStgyFactory =
+        new HibernateAccessStrategyFactory(hibernate4transformer, EXCEPTION_CONVERTER);
+
+    /** */
+    private SessionFactoryOptions options;
+
+    /** {@inheritDoc} */
+    @Override public void start(SessionFactoryOptions options, Map cfgValues) throws CacheException {
+        this.options = options;
+
+        String accessType = cfgValues.getOrDefault(
+            DFLT_ACCESS_TYPE_PROPERTY, NONSTRICT_READ_WRITE.name()).toString();
+
+        dfltAccessType = AccessType.valueOf(accessType);
+
+        accessStgyFactory.start(cfgValues);
+    }
+
+    /**
+     * @return Access strategy factory.
+     */
+    HibernateAccessStrategyFactory accessStrategyFactory() {
+        return accessStgyFactory;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void stop() {
+        // No-op.
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean isMinimalPutsEnabledByDefault() {
+        return false;
+    }
+
+    /** {@inheritDoc} */
+    @Override public AccessType getDefaultAccessType() {
+        return dfltAccessType;
+    }
+
+    /** {@inheritDoc} */
+    @Override public long nextTimestamp() {
+        return Instant.now().toEpochMilli();
+    }
+
+    /** {@inheritDoc} */
+    @Override public String qualify(String regionName) {
+        return RegionNameQualifier.INSTANCE.qualify(regionName, options);
+    }
+
+    /** {@inheritDoc} */
+    @Override public DomainDataRegion buildDomainDataRegion(
+        DomainDataRegionConfig regionCfg,
+        DomainDataRegionBuildingContext buildingCtx) {
+        return new IgniteDomainDataRegion(regionCfg, this, null, buildingCtx,
+            accessStgyFactory);
+    }
+
+    /** {@inheritDoc} */
+    @Override public QueryResultsRegion buildQueryResultsRegion(String regionName, SessionFactoryImplementor sessFactory) {
+        return new IgniteQueryResultsRegion(this, regionName, accessStgyFactory.node(),
+            accessStgyFactory.regionCache(regionName));
+    }
+
+    /** {@inheritDoc} */
+    @Override public TimestampsRegion buildTimestampsRegion(String regionName, SessionFactoryImplementor sessFactory) {
+        return new IgniteTimestampsRegion(this, regionName, accessStgyFactory.node(),
+            accessStgyFactory.regionCache(regionName));
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCachedDomainDataAccess.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCachedDomainDataAccess.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCachedDomainDataAccess.java
new file mode 100644
index 0000000..4003418
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCachedDomainDataAccess.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.spi.DomainDataRegion;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.access.CachedDomainDataAccess;
+import org.hibernate.cache.spi.access.SoftLock;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Implementation of L2 cache access strategy delegating to {@link HibernateAccessStrategyAdapter}.
+ */
+public abstract class IgniteCachedDomainDataAccess extends HibernateRegion implements CachedDomainDataAccess {
+    /** */
+    protected final HibernateAccessStrategyAdapter stgy;
+
+    /** */
+    private DomainDataRegion domainDataRegion;
+
+    /**
+     * @param stgy Access strategy implementation.
+     */
+    protected IgniteCachedDomainDataAccess(HibernateAccessStrategyAdapter stgy,
+        RegionFactory regionFactory,
+        DomainDataRegion domainDataRegion,
+        Ignite ignite, HibernateCacheProxy cache) {
+        super(regionFactory, cache.name(), ignite, cache);
+
+        this.stgy = stgy;
+        this.domainDataRegion = domainDataRegion;
+    }
+
+    /** {@inheritDoc} */
+    @Override public DomainDataRegion getRegion() {
+        return domainDataRegion;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Object get(SharedSessionContractImplementor ses, Object key) throws CacheException {
+        return stgy.get(key);
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean putFromLoad(SharedSessionContractImplementor ses, Object key, Object value, Object version) throws CacheException {
+        stgy.putFromLoad(key, value);
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean putFromLoad(SharedSessionContractImplementor ses, Object key, Object value, Object version, boolean minimalPutOverride) throws CacheException {
+        stgy.putFromLoad(key, value);
+        return true;
+    }
+
+    /** {@inheritDoc} */
+    @Override public SoftLock lockItem(SharedSessionContractImplementor ses, Object key, Object version) throws CacheException {
+        stgy.lock(key);
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void unlockItem(SharedSessionContractImplementor ses, Object key, SoftLock lock) throws CacheException {
+        stgy.unlock(key);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void remove(SharedSessionContractImplementor ses, Object key) throws CacheException {
+        stgy.remove(key);
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public SoftLock lockRegion() throws CacheException {
+        stgy.lockRegion();
+
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void unlockRegion(SoftLock lock) throws CacheException {
+        stgy.unlockRegion();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void removeAll(SharedSessionContractImplementor ses) throws CacheException {
+        stgy.removeAll();
+    }
+
+    /** {@inheritDoc} */
+    @Override public void evict(Object key) throws CacheException {
+        stgy.evict(key);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void evictAll() throws CacheException {
+        stgy.evictAll();
+    }
+
+    /** {@inheritDoc} */
+    @Override public boolean contains(Object key) {
+        return stgy.get(key) != null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCollectionDataAccess.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCollectionDataAccess.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCollectionDataAccess.java
new file mode 100644
index 0000000..aabe32e
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteCollectionDataAccess.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.spi.DomainDataRegion;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cache.spi.access.CollectionDataAccess;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.persister.collection.CollectionPersister;
+
+/** */
+public class IgniteCollectionDataAccess extends IgniteCachedDomainDataAccess implements CollectionDataAccess {
+    /** */
+    private final AccessType accessType;
+
+    /** */
+    public IgniteCollectionDataAccess(HibernateAccessStrategyAdapter stgy, AccessType accessType,
+        RegionFactory regionFactory,
+        DomainDataRegion domainDataRegion, Ignite ignite,
+        HibernateCacheProxy cache) {
+        super(stgy, regionFactory, domainDataRegion, ignite, cache);
+
+        this.accessType = accessType;
+    }
+
+    /** */
+    @Override public AccessType getAccessType() {
+        return accessType;
+    }
+
+    /** */
+    @Override public Object generateCacheKey(
+        Object id,
+        CollectionPersister persister,
+        SessionFactoryImplementor factory,
+        String tenantIdentifier) {
+        return HibernateKeyWrapper.staticCreateCollectionKey(id, persister, tenantIdentifier);
+    }
+
+    /** */
+    @Override public Object getCacheKeyId(Object cacheKey) {
+        return ((HibernateKeyWrapper)cacheKey).id();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteDomainDataRegion.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteDomainDataRegion.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteDomainDataRegion.java
new file mode 100644
index 0000000..c422a52
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteDomainDataRegion.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.cfg.spi.CollectionDataCachingConfig;
+import org.hibernate.cache.cfg.spi.DomainDataRegionBuildingContext;
+import org.hibernate.cache.cfg.spi.DomainDataRegionConfig;
+import org.hibernate.cache.cfg.spi.EntityDataCachingConfig;
+import org.hibernate.cache.cfg.spi.NaturalIdDataCachingConfig;
+import org.hibernate.cache.spi.CacheKeysFactory;
+import org.hibernate.cache.spi.ExtendedStatisticsSupport;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cache.spi.access.CollectionDataAccess;
+import org.hibernate.cache.spi.access.EntityDataAccess;
+import org.hibernate.cache.spi.access.NaturalIdDataAccess;
+import org.hibernate.cache.spi.support.AbstractDomainDataRegion;
+
+/** */
+public class IgniteDomainDataRegion extends AbstractDomainDataRegion implements ExtendedStatisticsSupport {
+    /** */
+    private final HibernateCacheProxy cache;
+
+    /** */
+    private HibernateAccessStrategyFactory stgyFactory;
+
+    /** */
+    public IgniteDomainDataRegion(DomainDataRegionConfig regionCfg,
+        RegionFactory regionFactory,
+        CacheKeysFactory defKeysFactory,
+        DomainDataRegionBuildingContext buildingCtx,
+        HibernateAccessStrategyFactory stgyFactory) {
+        super(regionCfg, regionFactory, defKeysFactory, buildingCtx);
+
+        this.stgyFactory = stgyFactory;
+
+        cache = stgyFactory.regionCache(getName());
+
+        completeInstantiation(regionCfg, buildingCtx);
+    }
+
+    /** */
+    @Override protected EntityDataAccess generateEntityAccess(EntityDataCachingConfig entityAccessCfg) {
+        AccessType accessType = entityAccessCfg.getAccessType();
+        Ignite ignite = stgyFactory.node();
+        switch (accessType) {
+            case READ_ONLY:
+                HibernateAccessStrategyAdapter readOnlyStgy =
+                    stgyFactory.createReadOnlyStrategy(cache);
+                return new IgniteEntityDataAccess(readOnlyStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case NONSTRICT_READ_WRITE:
+                HibernateAccessStrategyAdapter nonStrictReadWriteStgy =
+                    stgyFactory.createNonStrictReadWriteStrategy(cache);
+                return new IgniteEntityDataAccess(nonStrictReadWriteStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case READ_WRITE:
+                HibernateAccessStrategyAdapter readWriteStgy =
+                    stgyFactory.createReadWriteStrategy(cache);
+                return new IgniteEntityDataAccess(readWriteStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case TRANSACTIONAL:
+                HibernateAccessStrategyAdapter transactionalStgy =
+                    stgyFactory.createTransactionalStrategy(cache);
+                return new IgniteEntityDataAccess(transactionalStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            default:
+                throw new IllegalArgumentException("Unknown Hibernate access type: " + accessType);
+        }
+    }
+
+    /** */
+    @Override protected CollectionDataAccess generateCollectionAccess(CollectionDataCachingConfig cachingCfg) {
+        HibernateCacheProxy cache = stgyFactory.regionCache(getName());
+        AccessType accessType = cachingCfg.getAccessType();
+        Ignite ignite = stgyFactory.node();
+        switch (accessType) {
+            case READ_ONLY:
+                HibernateAccessStrategyAdapter readOnlyStgy =
+                    stgyFactory.createReadOnlyStrategy(cache);
+                return new IgniteCollectionDataAccess(readOnlyStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case NONSTRICT_READ_WRITE:
+                HibernateAccessStrategyAdapter nonStrictReadWriteStgy =
+                    stgyFactory.createNonStrictReadWriteStrategy(cache);
+                return new IgniteCollectionDataAccess(nonStrictReadWriteStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case READ_WRITE:
+                HibernateAccessStrategyAdapter readWriteStgy =
+                    stgyFactory.createReadWriteStrategy(cache);
+                return new IgniteCollectionDataAccess(readWriteStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case TRANSACTIONAL:
+                HibernateAccessStrategyAdapter transactionalStgy =
+                    stgyFactory.createTransactionalStrategy(cache);
+                return new IgniteCollectionDataAccess(transactionalStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            default:
+                throw new IllegalArgumentException("Unknown Hibernate access type: " + accessType);
+        }
+    }
+
+    /** */
+    @Override protected NaturalIdDataAccess generateNaturalIdAccess(NaturalIdDataCachingConfig naturalIdAccessCfg) {
+        HibernateCacheProxy cache = stgyFactory.regionCache(getName());
+        AccessType accessType = naturalIdAccessCfg.getAccessType();
+        Ignite ignite = stgyFactory.node();
+        switch (accessType) {
+            case READ_ONLY:
+                HibernateAccessStrategyAdapter readOnlyStgy =
+                    stgyFactory.createReadOnlyStrategy(cache);
+                return new IgniteNaturalIdDataAccess(readOnlyStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case NONSTRICT_READ_WRITE:
+                HibernateAccessStrategyAdapter nonStrictReadWriteStgy =
+                    stgyFactory.createNonStrictReadWriteStrategy(cache);
+                return new IgniteNaturalIdDataAccess(nonStrictReadWriteStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case READ_WRITE:
+                HibernateAccessStrategyAdapter readWriteStgy =
+                    stgyFactory.createReadWriteStrategy(cache);
+                return new IgniteNaturalIdDataAccess(readWriteStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            case TRANSACTIONAL:
+                HibernateAccessStrategyAdapter transactionalStgy =
+                    stgyFactory.createTransactionalStrategy(cache);
+                return new IgniteNaturalIdDataAccess(transactionalStgy, accessType, getRegionFactory(),
+                    this, ignite, cache);
+
+            default:
+                throw new IllegalArgumentException("Unknown Hibernate access type: " + accessType);
+        }
+    }
+
+    /** */
+    @Override public void destroy() throws CacheException {
+        // no-op
+    }
+
+    /** */
+    @Override public long getElementCountInMemory() {
+        return cache.offHeapEntriesCount();
+    }
+
+    /** */
+    @Override public long getElementCountOnDisk() {
+        return cache.sizeLong();
+    }
+
+    /** */
+    @Override public long getSizeInMemory() {
+        return cache.offHeapAllocatedSize();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteEntityDataAccess.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteEntityDataAccess.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteEntityDataAccess.java
new file mode 100644
index 0000000..54fad42
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteEntityDataAccess.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.spi.DomainDataRegion;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cache.spi.access.EntityDataAccess;
+import org.hibernate.cache.spi.access.SoftLock;
+import org.hibernate.engine.spi.SessionFactoryImplementor;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.hibernate.persister.entity.EntityPersister;
+
+/** */
+public class IgniteEntityDataAccess extends IgniteCachedDomainDataAccess implements EntityDataAccess {
+    /** */
+    private final AccessType accessType;
+
+    /** */
+    public IgniteEntityDataAccess(HibernateAccessStrategyAdapter stgy, AccessType accessType,
+        RegionFactory regionFactory,
+        DomainDataRegion domainDataRegion, Ignite ignite,
+        HibernateCacheProxy cache) {
+        super(stgy, regionFactory, domainDataRegion, ignite, cache);
+
+        this.accessType = accessType;
+    }
+
+    /** */
+    @Override public Object generateCacheKey(Object id, EntityPersister persister, SessionFactoryImplementor factory,
+        String tenantIdentifier) {
+        return HibernateKeyWrapper.staticCreateEntityKey(id, persister, tenantIdentifier);
+    }
+
+    /** */
+    @Override public Object getCacheKeyId(Object cacheKey) {
+        return ((HibernateKeyWrapper) cacheKey).id();
+    }
+
+    /** */
+    @Override public boolean insert(SharedSessionContractImplementor ses, Object key, Object val, Object ver) {
+        return stgy.insert(key, val);
+    }
+
+    /** */
+    @Override public boolean afterInsert(SharedSessionContractImplementor ses, Object key, Object val, Object ver) {
+        return stgy.afterInsert(key, val);
+    }
+
+    /** */
+    @Override public boolean update(SharedSessionContractImplementor ses, Object key, Object val, Object curVer, Object prevVer) {
+        return stgy.update(key, val);
+    }
+
+    /** */
+    @Override public boolean afterUpdate(SharedSessionContractImplementor ses, Object key, Object val, Object curVer, Object prevVer, SoftLock lock) {
+        return stgy.afterUpdate(key, val);
+    }
+
+    /** */
+    @Override public AccessType getAccessType() {
+        return accessType;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteGeneralDataRegion.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteGeneralDataRegion.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteGeneralDataRegion.java
new file mode 100644
index 0000000..4762054
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteGeneralDataRegion.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.spi.DirectAccessRegion;
+import org.hibernate.cache.spi.QueryResultsRegion;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.TimestampsRegion;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Implementation of {@link DirectAccessRegion}. This interface defines common contract for {@link QueryResultsRegion}
+ * and {@link TimestampsRegion}.
+ */
+public class IgniteGeneralDataRegion extends HibernateRegion implements DirectAccessRegion {
+    /** */
+    private final IgniteLogger log;
+
+    /**
+     * @param factory Region factory.
+     * @param name Region name.
+     * @param ignite Grid.
+     * @param cache Region cache.
+     */
+    IgniteGeneralDataRegion(RegionFactory factory, String name,
+        Ignite ignite, HibernateCacheProxy cache) {
+        super(factory, name, ignite, cache);
+
+        log = ignite.log().getLogger(getClass());
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public Object getFromCache(Object key, SharedSessionContractImplementor ses) throws CacheException {
+        try {
+            Object val = cache.get(key);
+
+            if (log.isDebugEnabled())
+                log.debug("Get [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+
+            return val;
+        }
+        catch (IgniteCheckedException e) {
+            throw new CacheException(e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void putIntoCache(Object key, Object val, SharedSessionContractImplementor ses) throws CacheException {
+        try {
+            cache.put(key, val);
+
+            if (log.isDebugEnabled())
+                log.debug("Put [cache=" + cache.name() + ", key=" + key + ", val=" + val + ']');
+        }
+        catch (IgniteCheckedException e) {
+            throw new CacheException(e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override public void clear() {
+        try {
+            cache.clear();
+        }
+        catch (IgniteCheckedException e) {
+            throw new CacheException("Problem clearing cache [name=" + cache.name() + "]", e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/272858db/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteNaturalIdDataAccess.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteNaturalIdDataAccess.java b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteNaturalIdDataAccess.java
new file mode 100644
index 0000000..aa11ce5
--- /dev/null
+++ b/modules/hibernate-5.3/src/main/java/org/apache/ignite/cache/hibernate/IgniteNaturalIdDataAccess.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.cache.hibernate;
+
+import org.apache.ignite.Ignite;
+import org.hibernate.cache.CacheException;
+import org.hibernate.cache.internal.DefaultCacheKeysFactory;
+import org.hibernate.cache.spi.DomainDataRegion;
+import org.hibernate.cache.spi.RegionFactory;
+import org.hibernate.cache.spi.access.AccessType;
+import org.hibernate.cache.spi.access.NaturalIdDataAccess;
+import org.hibernate.cache.spi.access.SoftLock;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.hibernate.persister.entity.EntityPersister;
+
+/** */
+public class IgniteNaturalIdDataAccess extends IgniteCachedDomainDataAccess implements NaturalIdDataAccess {
+    /** */
+    private final AccessType accessType;
+
+    /** */
+    public IgniteNaturalIdDataAccess(HibernateAccessStrategyAdapter stgy, AccessType accessType,
+        RegionFactory regionFactory,
+        DomainDataRegion domainDataRegion, Ignite ignite,
+        HibernateCacheProxy cache) {
+        super(stgy, regionFactory, domainDataRegion, ignite, cache);
+
+        this.accessType = accessType;
+    }
+
+    /** */
+    @Override public AccessType getAccessType() {
+        return accessType;
+    }
+
+    /** */
+    @Override public Object generateCacheKey(Object[] naturalIdValues, EntityPersister persister, SharedSessionContractImplementor ses) {
+        return DefaultCacheKeysFactory.staticCreateNaturalIdKey(naturalIdValues, persister, ses);
+    }
+
+    /** */
+    @Override public Object[] getNaturalIdValues(Object cacheKey) {
+        return DefaultCacheKeysFactory.staticGetNaturalIdValues(cacheKey);
+    }
+
+    /** */
+    @Override public boolean insert(SharedSessionContractImplementor ses, Object key, Object val) throws CacheException {
+        return stgy.insert(key, val);
+    }
+
+    /** */
+    @Override public boolean afterInsert(SharedSessionContractImplementor ses, Object key, Object val) throws CacheException {
+        return stgy.afterInsert(key, val);
+    }
+
+    /** */
+    @Override public boolean update(SharedSessionContractImplementor ses, Object key, Object val) throws CacheException {
+        return stgy.update(key, val);
+    }
+
+    /** */
+    @Override public boolean afterUpdate(SharedSessionContractImplementor ses, Object key, Object val, SoftLock lock) throws CacheException {
+        return stgy.afterUpdate(key, val);
+    }
+}


[36/52] [abbrv] ignite git commit: IGNITE-10719: [ML] LearningEnvironmentBuilder is not passed in makeBagged

Posted by sb...@apache.org.
IGNITE-10719: [ML] LearningEnvironmentBuilder is not passed in
makeBagged

This closes #5684


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/388f7ffc
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/388f7ffc
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/388f7ffc

Branch: refs/heads/ignite-627
Commit: 388f7ffc448ed44f1a00b03a7bb7f57d57bc117a
Parents: f2d6e43
Author: Artem Malykh <am...@gmail.com>
Authored: Tue Dec 18 22:00:10 2018 +0300
Committer: Yury Babak <yb...@gridgain.com>
Committed: Tue Dec 18 22:00:10 2018 +0300

----------------------------------------------------------------------
 .../org/apache/ignite/ml/trainers/TrainerTransformers.java     | 2 +-
 .../ml/tree/randomforest/RandomForestClassifierTrainer.java    | 6 ++++++
 .../tree/randomforest/RandomForestClassifierTrainerTest.java   | 4 +++-
 3 files changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/388f7ffc/modules/ml/src/main/java/org/apache/ignite/ml/trainers/TrainerTransformers.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/trainers/TrainerTransformers.java b/modules/ml/src/main/java/org/apache/ignite/ml/trainers/TrainerTransformers.java
index 1019a39..80a57e0 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/trainers/TrainerTransformers.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/trainers/TrainerTransformers.java
@@ -122,7 +122,7 @@ public class TrainerTransformers {
                     aggregator,
                     environment);
             }
-        };
+        }.withEnvironmentBuilder(trainer.envBuilder);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/388f7ffc/modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.java b/modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.java
index 7832584..a76a941 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainer.java
@@ -30,6 +30,7 @@ import org.apache.ignite.ml.dataset.feature.ObjectHistogram;
 import org.apache.ignite.ml.dataset.impl.bootstrapping.BootstrappedDatasetPartition;
 import org.apache.ignite.ml.dataset.impl.bootstrapping.BootstrappedVector;
 import org.apache.ignite.ml.dataset.primitive.context.EmptyContext;
+import org.apache.ignite.ml.environment.LearningEnvironmentBuilder;
 import org.apache.ignite.ml.tree.randomforest.data.TreeRoot;
 import org.apache.ignite.ml.tree.randomforest.data.impurity.GiniHistogram;
 import org.apache.ignite.ml.tree.randomforest.data.impurity.GiniHistogramsComputer;
@@ -110,4 +111,9 @@ public class RandomForestClassifierTrainer
     @Override protected LeafValuesComputer<ObjectHistogram<BootstrappedVector>> createLeafStatisticsAggregator() {
         return new ClassifierLeafValuesComputer(lblMapping);
     }
+
+    /** {@inheritDoc} */
+    @Override public RandomForestClassifierTrainer withEnvironmentBuilder(LearningEnvironmentBuilder envBuilder) {
+        return (RandomForestClassifierTrainer)super.withEnvironmentBuilder(envBuilder);
+    }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/388f7ffc/modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainerTest.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainerTest.java b/modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainerTest.java
index 3a038ff..7d282df 100644
--- a/modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainerTest.java
+++ b/modules/ml/src/test/java/org/apache/ignite/ml/tree/randomforest/RandomForestClassifierTrainerTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.ml.tree.randomforest;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.ignite.ml.TestUtils;
 import org.apache.ignite.ml.common.TrainerTest;
 import org.apache.ignite.ml.composition.ModelsComposition;
 import org.apache.ignite.ml.composition.predictionsaggregator.OnMajorityPredictionsAggregator;
@@ -81,7 +82,8 @@ public class RandomForestClassifierTrainerTest extends TrainerTest {
             meta.add(new FeatureMeta("", i, false));
         RandomForestClassifierTrainer trainer = new RandomForestClassifierTrainer(meta)
             .withAmountOfTrees(100)
-            .withFeaturesCountSelectionStrgy(x -> 2);
+            .withFeaturesCountSelectionStrgy(x -> 2)
+            .withEnvironmentBuilder(TestUtils.testEnvBuilder());
 
         ModelsComposition originalMdl = trainer.fit(sample, parts, (k, v) -> VectorUtils.of(k), (k, v) -> v);
         ModelsComposition updatedOnSameDS = trainer.update(originalMdl, sample, parts, (k, v) -> VectorUtils.of(k), (k, v) -> v);


[50/52] [abbrv] ignite git commit: ignite-9213 Do not use IgniteInterruptedCheckedException to complete futures on node stop

Posted by sb...@apache.org.
ignite-9213 Do not use IgniteInterruptedCheckedException to complete futures on node stop


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a8d39906
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a8d39906
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a8d39906

Branch: refs/heads/ignite-627
Commit: a8d39906971fb8e9512b77732739270e71796dac
Parents: 272858d
Author: sboikov <sb...@apache.org>
Authored: Wed Dec 19 22:49:22 2018 +0300
Committer: sboikov <sb...@apache.org>
Committed: Wed Dec 19 22:49:22 2018 +0300

----------------------------------------------------------------------
 .../GridCachePartitionExchangeManager.java      |   2 +-
 .../GridDhtPartitionsExchangeFuture.java        |   4 +-
 .../CacheLockReleaseNodeLeaveTest.java          | 108 +++++++++++++++++--
 3 files changed, 106 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a8d39906/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 96158d7..364950c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -763,7 +763,7 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
         stopErr = cctx.kernalContext().clientDisconnected() ?
             new IgniteClientDisconnectedCheckedException(cctx.kernalContext().cluster().clientReconnectFuture(),
                 "Client node disconnected: " + cctx.igniteInstanceName()) :
-            new IgniteInterruptedCheckedException("Node is stopping: " + cctx.igniteInstanceName());
+            new IgniteCheckedException("Node is stopping: " + cctx.igniteInstanceName());
 
         // Stop exchange worker
         U.cancel(exchWorker);

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8d39906/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
index 89e03a2..5b9ebf1 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/preloader/GridDhtPartitionsExchangeFuture.java
@@ -843,7 +843,9 @@ public class GridDhtPartitionsExchangeFuture extends GridDhtTopologyFutureAdapte
                 exchLog.info("Finished exchange init [topVer=" + topVer + ", crd=" + crdNode + ']');
         }
         catch (IgniteInterruptedCheckedException e) {
-            onDone(e);
+            assert cctx.kernalContext().isStopping();
+
+            onDone(new IgniteCheckedException("Node stopped"));
 
             throw e;
         }

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8d39906/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLockReleaseNodeLeaveTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLockReleaseNodeLeaveTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLockReleaseNodeLeaveTest.java
index 2d5f5fe..d48d5d1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLockReleaseNodeLeaveTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheLockReleaseNodeLeaveTest.java
@@ -20,6 +20,7 @@ package org.apache.ignite.internal.processors.cache.distributed;
 import java.util.ArrayDeque;
 import java.util.Queue;
 import java.util.concurrent.Callable;
+import java.util.concurrent.ThreadLocalRandom;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.Lock;
 import org.apache.ignite.Ignite;
@@ -144,8 +145,6 @@ public class CacheLockReleaseNodeLeaveTest extends GridCommonAbstractTest {
      */
     @Test
     public void testLockTopologyChange() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-9213");
-
         final int nodeCnt = 5;
         int threadCnt = 8;
         final int keys = 100;
@@ -167,9 +166,87 @@ public class CacheLockReleaseNodeLeaveTest extends GridCommonAbstractTest {
                                 Lock lock = cache.lock(i);
                                 lock.lock();
 
-                                cache.put(i, i);
+                                try {
+                                    cache.put(i, i);
+                                }
+                                finally {
+                                    lock.unlock();
+                                }
+                            }
+                        }
+                    }
+                }, threadCnt, "test-lock-thread");
+
+                q.add(f);
+
+                U.sleep(1_000);
+            }
+
+            stop.set(true);
+
+            IgniteInternalFuture<Long> f;
+
+            Exception err = null;
+
+            while ((f = q.poll()) != null) {
+                try {
+                    f.get(60_000);
+                }
+                catch (Exception e) {
+                    error("Test operation failed: " + e, e);
+
+                    if (err == null)
+                        err = e;
+                }
+            }
+
+            if (err != null)
+                fail("Test operation failed, see log for details");
+        }
+        finally {
+            stopAllGrids();
+        }
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testLockNodeStop() throws Exception {
+        final int nodeCnt = 3;
+        int threadCnt = 2;
+        final int keys = 100;
+
+        try {
+            final AtomicBoolean stop = new AtomicBoolean(false);
+
+            Queue<IgniteInternalFuture<Long>> q = new ArrayDeque<>(nodeCnt);
 
-                                lock.unlock();
+            for (int i = 0; i < nodeCnt; i++) {
+                final Ignite ignite = startGrid(i);
+
+                IgniteInternalFuture<Long> f = GridTestUtils.runMultiThreadedAsync(new Runnable() {
+                    @Override public void run() {
+                        while (!Thread.currentThread().isInterrupted() && !stop.get()) {
+                            try {
+                                IgniteCache<Integer, Integer> cache = ignite.cache(REPLICATED_TEST_CACHE);
+
+                                for (int i = 0; i < keys; i++) {
+                                    Lock lock = cache.lock(i);
+                                    lock.lock();
+
+                                    try {
+                                        cache.put(i, i);
+                                    }
+                                    finally {
+                                        lock.unlock();
+                                    }
+                                }
+                            }
+                            catch (Exception e) {
+                                log.info("Ignore error: " + e);
+
+                                break;
                             }
                         }
                     }
@@ -180,12 +257,31 @@ public class CacheLockReleaseNodeLeaveTest extends GridCommonAbstractTest {
                 U.sleep(1_000);
             }
 
+            U.sleep(ThreadLocalRandom.current().nextLong(500) + 500);
+
+            // Stop all nodes, check that threads executing cache operations do not hang.
+            stopAllGrids();
+
             stop.set(true);
 
             IgniteInternalFuture<Long> f;
 
-            while ((f = q.poll()) != null)
-                f.get(2_000);
+            Exception err = null;
+
+            while ((f = q.poll()) != null) {
+                try {
+                    f.get(60_000);
+                }
+                catch (Exception e) {
+                    error("Test operation failed: " + e, e);
+
+                    if (err == null)
+                        err = e;
+                }
+            }
+
+            if (err != null)
+                fail("Test operation failed, see log for details");
         }
         finally {
             stopAllGrids();


[39/52] [abbrv] ignite git commit: IGNITE-9774: Test remuted with a proper ticket. This closes #5687.

Posted by sb...@apache.org.
IGNITE-9774: Test remuted with a proper ticket. This closes #5687.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ca8a80bf
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ca8a80bf
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ca8a80bf

Branch: refs/heads/ignite-627
Commit: ca8a80bfad854e9caa7c103cd7db6066c997f4e9
Parents: 7d4e1fd
Author: rkondakov <ko...@mail.ru>
Authored: Wed Dec 19 14:25:42 2018 +0300
Committer: Igor Seliverstov <gv...@gmail.com>
Committed: Wed Dec 19 14:25:42 2018 +0300

----------------------------------------------------------------------
 .../processors/cache/mvcc/CacheMvccTransactionsTest.java         | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ca8a80bf/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
index 8be20d5..ffb98e4 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
@@ -93,6 +93,7 @@ import org.apache.ignite.transactions.Transaction;
 import org.apache.ignite.transactions.TransactionIsolation;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
@@ -1574,9 +1575,8 @@ public class CacheMvccTransactionsTest extends CacheMvccAbstractTest {
      * @throws Exception If failed.
      */
     @Test
+    @Ignore("https://issues.apache.org/jira/browse/IGNITE-9949")
     public void testPutAllGetAll_ClientServer_Backups1_Restart_Scan() throws Exception {
-        fail("https://issues.apache.org/jira/browse/IGNITE-9774");
-
         putAllGetAll(RestartMode.RESTART_RND_SRV, 4, 2, 1, 64, null, SCAN, PUT);
     }
 


[41/52] [abbrv] ignite git commit: IGNITE-10050 Fixed unmuted test

Posted by sb...@apache.org.
IGNITE-10050 Fixed unmuted test


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/664fb93d
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/664fb93d
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/664fb93d

Branch: refs/heads/ignite-627
Commit: 664fb93da2cd753a92e4f70e7e06d40281d23e7e
Parents: 9dc6d08
Author: Alexey Goncharuk <al...@gmail.com>
Authored: Wed Dec 19 15:10:46 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Wed Dec 19 15:11:07 2018 +0300

----------------------------------------------------------------------
 .../cache/ClusterStateAbstractTest.java         | 56 +++++++++++---------
 1 file changed, 30 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/664fb93d/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClusterStateAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClusterStateAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClusterStateAbstractTest.java
index 059c38c..fc8d2f2 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClusterStateAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/ClusterStateAbstractTest.java
@@ -122,14 +122,14 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
 
         forbidden.clear();
 
-        grid(0).active(true);
+        grid(0).cluster().active(true);
 
         IgniteCache<Object, Object> cache2 = grid(0).createCache(new CacheConfiguration<>("cache2"));
 
         for (int k = 0; k < ENTRY_CNT; k++)
             cache2.put(k, k);
 
-        grid(0).active(false);
+        grid(0).cluster().active(false);
 
         checkInactive(GRID_CNT);
 
@@ -152,7 +152,7 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
 
         forbidden.clear();
 
-        grid(0).active(true);
+        grid(0).cluster().active(true);
 
         awaitPartitionMapExchange();
 
@@ -163,7 +163,7 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
 
         for (int g = 0; g < GRID_CNT; g++) {
             // Tests that state changes are propagated to existing and new nodes.
-            assertTrue(grid(g).active());
+            assertTrue(grid(g).cluster().active());
 
             IgniteCache<Object, Object> cache0 = grid(g).cache(CACHE_NAME);
 
@@ -196,12 +196,12 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
                 assertEquals(k,  cache0.get(k));
         }
 
-        grid(0).active(false);
+        grid(0).cluster().active(false);
 
         GridTestUtils.waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
                 for (int g = 0; g < GRID_CNT; g++) {
-                    if (grid(g).active())
+                    if (grid(g).cluster().active())
                         return false;
                 }
 
@@ -240,7 +240,7 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
 
         forbidden.clear();
 
-        cl.active(true);
+        cl.cluster().active(true);
 
         awaitPartitionMapExchange();
 
@@ -251,7 +251,7 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
 
         for (int g = 0; g < GRID_CNT + 1; g++) {
             // Tests that state changes are propagated to existing and new nodes.
-            assertTrue(grid(g).active());
+            assertTrue(grid(g).cluster().active());
 
             IgniteCache<Object, Object> cache0 = grid(g).cache(CACHE_NAME);
 
@@ -259,12 +259,12 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
                 assertEquals(k,  cache0.get(k));
         }
 
-        cl.active(false);
+        cl.cluster().active(false);
 
         GridTestUtils.waitForCondition(new GridAbsPredicate() {
             @Override public boolean apply() {
                 for (int g = 0; g < GRID_CNT + 1; g++) {
-                    if (grid(g).active())
+                    if (grid(g).cluster().active())
                         return false;
                 }
 
@@ -288,16 +288,20 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
 
         lock.lock();
 
-        GridTestUtils.assertThrowsAnyCause(log, new Callable<Object>() {
-            @Override public Object call() throws Exception {
-                grid(0).active(false);
-
-                return null;
-            }
-        }, IgniteException.class,
-            "Failed to deactivate cluster (must invoke the method outside of an active transaction or lock).");
+        try {
+            //noinspection ThrowableNotThrown
+            GridTestUtils.assertThrowsAnyCause(log, new Callable<Object>() {
+                @Override public Object call() {
+                    grid(0).cluster().active(false);
 
-        lock.unlock();
+                    return null;
+                }
+            }, IgniteException.class,
+                "Failed to deactivate cluster (must invoke the method outside of an active transaction).");
+        }
+        finally {
+            lock.unlock();
+        }
     }
 
     /**
@@ -316,25 +320,25 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
     }
 
     /**
-     * @throws Exception if failed.
      */
     private void deactivateWithPendingTransaction(TransactionConcurrency concurrency,
-        TransactionIsolation isolation) throws Exception {
+        TransactionIsolation isolation) {
         final Ignite ignite0 = grid(0);
 
         final IgniteCache<Object, Object> cache0 = ignite0.cache(CACHE_NAME);
 
-        try (Transaction tx = ignite0.transactions().txStart(concurrency, isolation)) {
+        try (Transaction ignore = ignite0.transactions().txStart(concurrency, isolation)) {
             cache0.put(1, "1");
 
+            //noinspection ThrowableNotThrown
             GridTestUtils.assertThrowsAnyCause(log, new Callable<Object>() {
-                @Override public Object call() throws Exception {
-                    grid(0).active(false);
+                @Override public Object call() {
+                    grid(0).cluster().active(false);
 
                     return null;
                 }
             }, IgniteException.class,
-                "Failed to deactivate cluster (must invoke the method outside of an active transaction or lock).");
+                "Failed to deactivate cluster (must invoke the method outside of an active transaction).");
         }
 
         assertNull(cache0.get(1));
@@ -346,7 +350,7 @@ public abstract class ClusterStateAbstractTest extends GridCommonAbstractTest {
      */
     private void checkInactive(int cnt) {
         for (int g = 0; g < cnt; g++)
-            assertFalse(grid(g).active());
+            assertFalse(grid(g).cluster().active());
     }
 
     /**


[29/52] [abbrv] ignite git commit: IGNITE-4111 Fixed NPE on client connect before disco impl is initialized - Fixes #5650.

Posted by sb...@apache.org.
IGNITE-4111 Fixed NPE on client connect before disco impl is initialized - Fixes #5650.

Signed-off-by: Alexey Goncharuk <al...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c48f3bc1
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c48f3bc1
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c48f3bc1

Branch: refs/heads/ignite-627
Commit: c48f3bc1046b1c496e0261edf7a693efc728b8f6
Parents: 4ae29fc
Author: NSAmelchev <ns...@gmail.com>
Authored: Tue Dec 18 18:50:38 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Dec 18 18:55:54 2018 +0300

----------------------------------------------------------------------
 .../spi/discovery/tcp/TcpDiscoverySpi.java      |   4 +
 ...IgniteTcpCommunicationConnectOnInitTest.java | 172 +++++++++++++++++++
 .../IgniteSpiCommunicationSelfTestSuite.java    |   2 +
 3 files changed, 178 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c48f3bc1/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index ce3370e..c48fa11 100644
--- a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -451,6 +451,10 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter implements IgniteDiscovery
 
     /** {@inheritDoc} */
     @Override public Collection<ClusterNode> getRemoteNodes() {
+        // Return empty nodes for resolving compatibility until implementation started.
+        if (impl == null)
+            return Collections.emptyList();
+
         return impl.getRemoteNodes();
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c48f3bc1/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationConnectOnInitTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationConnectOnInitTest.java b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationConnectOnInitTest.java
new file mode 100644
index 0000000..0293316
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/spi/communication/tcp/IgniteTcpCommunicationConnectOnInitTest.java
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.spi.communication.tcp;
+
+import java.net.BindException;
+import java.net.InetSocketAddress;
+import java.nio.channels.SocketChannel;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.util.nio.GridNioServer;
+import org.apache.ignite.internal.util.nio.GridNioServerListenerAdapter;
+import org.apache.ignite.internal.util.nio.GridNioSession;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.spi.IgniteSpiException;
+import org.apache.ignite.spi.communication.tcp.messages.HandshakeWaitMessage;
+import org.apache.ignite.testframework.GridTestUtils;
+import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
+import org.jetbrains.annotations.Nullable;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Testing {@link TcpCommunicationSpi} that will send the wait handshake message on received connections until SPI
+ * context initialized.
+ */
+@RunWith(JUnit4.class)
+public class IgniteTcpCommunicationConnectOnInitTest extends GridCommonAbstractTest {
+    /** */
+    private static final int START_PORT = 55443;
+
+    /** */
+    private volatile CountDownLatch commStartLatch;
+
+    /** */
+    private volatile int commSpiBoundedPort;
+
+    /** */
+    private volatile String commSpiSrvAddr;
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        cfg.setCommunicationSpi(new TestCommunicationSpi());
+
+        return cfg;
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testClientConnectBeforeDiscoveryStarted() throws Exception {
+        GridNioServer<?> srvr = startServer();
+
+        try {
+            commStartLatch = new CountDownLatch(1);
+
+            IgniteInternalFuture<Boolean> fut = GridTestUtils.runAsync(() -> {
+                startGrid(0);
+
+                return true;
+            });
+
+            assertTrue(commStartLatch.await(5_000, TimeUnit.MILLISECONDS));
+
+            SocketChannel ch = SocketChannel.open(new InetSocketAddress(commSpiSrvAddr, commSpiBoundedPort));
+
+            GridNioSession ses = srvr.createSession(ch, null, false, null).get();
+
+            boolean wait = GridTestUtils.waitForCondition(
+                () -> ses.bytesReceived() == HandshakeWaitMessage.MESSAGE_FULL_SIZE, 1000);
+
+            assertTrue("Handshake not started.", wait);
+
+            fut.get();
+        }
+        finally {
+            srvr.stop();
+        }
+    }
+
+    /**
+     * Starts custom server.
+     *
+     * @return Started server.
+     * @throws Exception If failed.
+     */
+    @SuppressWarnings("unchecked")
+    private GridNioServer<?> startServer() throws Exception {
+        int srvPort = START_PORT;
+
+        for (int i = 0; i < 10; i++) {
+            try {
+                GridNioServerListenerAdapter lsnr = new GridNioServerListenerAdapter() {
+                    @Override public void onConnected(GridNioSession ses) {
+                        // No-op.
+                    }
+
+                    @Override public void onDisconnected(GridNioSession ses, @Nullable Exception e) {
+                        // No-op.
+                    }
+
+                    @Override public void onMessage(GridNioSession ses, Object msg) {
+                        // No-op.
+                    }
+                };
+
+                GridNioServer<?> srvr = GridNioServer.builder()
+                    .address(U.getLocalHost())
+                    .port(srvPort)
+                    .listener(lsnr)
+                    .logger(log)
+                    .selectorCount(Runtime.getRuntime().availableProcessors())
+                    .igniteInstanceName("nio-test-grid")
+                    .filters().build();
+
+                srvr.start();
+
+                return srvr;
+            }
+            catch (IgniteCheckedException e) {
+                if (i < 9 && e.hasCause(BindException.class)) {
+                    log.error("Failed to start server, will try another port [err=" + e + ", port=" + srvPort + ']');
+
+                    U.sleep(1000);
+
+                    srvPort++;
+                }
+                else
+                    throw e;
+            }
+        }
+
+        fail("Failed to start server.");
+
+        return null;
+    }
+
+    /** */
+    private class TestCommunicationSpi extends TcpCommunicationSpi {
+        /** {@inheritDoc} */
+        @Override public void spiStart(String igniteInstanceName) throws IgniteSpiException {
+            super.spiStart(igniteInstanceName);
+
+            commSpiBoundedPort = boundPort();
+
+            commSpiSrvAddr = getLocalAddress();
+
+            commStartLatch.countDown();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/c48f3bc1/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiCommunicationSelfTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiCommunicationSelfTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiCommunicationSelfTestSuite.java
index 6a38c55..5a208e6 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiCommunicationSelfTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteSpiCommunicationSelfTestSuite.java
@@ -36,6 +36,7 @@ import org.apache.ignite.spi.communication.tcp.GridTcpCommunicationSpiStartStopS
 import org.apache.ignite.spi.communication.tcp.GridTcpCommunicationSpiTcpFailureDetectionSelfTest;
 import org.apache.ignite.spi.communication.tcp.GridTcpCommunicationSpiTcpNoDelayOffSelfTest;
 import org.apache.ignite.spi.communication.tcp.GridTcpCommunicationSpiTcpSelfTest;
+import org.apache.ignite.spi.communication.tcp.IgniteTcpCommunicationConnectOnInitTest;
 import org.apache.ignite.spi.communication.tcp.IgniteTcpCommunicationHandshakeWaitSslTest;
 import org.apache.ignite.spi.communication.tcp.IgniteTcpCommunicationHandshakeWaitTest;
 import org.apache.ignite.spi.communication.tcp.IgniteTcpCommunicationRecoveryAckClosureSelfTest;
@@ -92,6 +93,7 @@ public class IgniteSpiCommunicationSelfTestSuite extends TestSuite {
 
         suite.addTest(new JUnit4TestAdapter(IgniteTcpCommunicationHandshakeWaitTest.class));
         suite.addTest(new JUnit4TestAdapter(IgniteTcpCommunicationHandshakeWaitSslTest.class));
+        suite.addTest(new JUnit4TestAdapter(IgniteTcpCommunicationConnectOnInitTest.class));
 
         //suite.addTest(new TestSuite(GridCacheDhtLockBackupSelfTest.class));
 


[44/52] [abbrv] ignite git commit: IGNITE-10731 Fixed ZK discovery IgniteCacheReplicatedQuerySelfTest.testNodeLeft test

Posted by sb...@apache.org.
IGNITE-10731 Fixed ZK discovery IgniteCacheReplicatedQuerySelfTest.testNodeLeft test

Signed-off-by: Pavel Kovalenko <jo...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9a1a830a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9a1a830a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9a1a830a

Branch: refs/heads/ignite-627
Commit: 9a1a830a8af1b1b9ad882f58c69b28488a3a3a1f
Parents: 8385993
Author: Vitaliy Biryukov <bi...@gmail.com>
Authored: Wed Dec 19 16:41:05 2018 +0300
Committer: Pavel Kovalenko <jo...@gmail.com>
Committed: Wed Dec 19 16:41:05 2018 +0300

----------------------------------------------------------------------
 .../replicated/IgniteCacheReplicatedQuerySelfTest.java        | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9a1a830a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java
index f741ef2..1d72b8c 100644
--- a/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java
+++ b/modules/indexing/src/test/java/org/apache/ignite/internal/processors/cache/distributed/replicated/IgniteCacheReplicatedQuerySelfTest.java
@@ -46,11 +46,11 @@ import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.testframework.GridTestUtils;
-import org.apache.ignite.testsuites.IgniteIgnore;
 import org.apache.ignite.transactions.Transaction;
 
 import static org.apache.ignite.cache.CacheMode.REPLICATED;
 import static org.apache.ignite.cache.CachePeekMode.ALL;
+import static org.apache.ignite.events.EventType.EVT_NODE_FAILED;
 import static org.apache.ignite.events.EventType.EVT_NODE_LEFT;
 
 /**
@@ -333,14 +333,13 @@ public class IgniteCacheReplicatedQuerySelfTest extends IgniteCacheAbstractQuery
     /**
      * @throws Exception If failed.
      */
-    @IgniteIgnore(value = "https://issues.apache.org/jira/browse/IGNITE-613", forceFailure = true)
     public void testNodeLeft() throws Exception {
         Ignite g = startGrid("client");
 
         try {
             assertTrue(g.configuration().isClientMode());
 
-            IgniteCache<Integer, Integer> cache = jcache(Integer.class, Integer.class);
+            IgniteCache<Integer, Integer> cache = jcache(g, Integer.class, Integer.class);
 
             for (int i = 0; i < 1000; i++)
                 cache.put(i, i);
@@ -371,7 +370,7 @@ public class IgniteCacheReplicatedQuerySelfTest extends IgniteCacheAbstractQuery
 
                     return true;
                 }
-            }, EVT_NODE_LEFT);
+            }, EVT_NODE_LEFT, EVT_NODE_FAILED);
 
             stopGrid("client");
 


[21/52] [abbrv] ignite git commit: IGNITE-9902 Fixed ScanQuery to account for LOST partitions - Fixes #5464.

Posted by sb...@apache.org.
IGNITE-9902 Fixed ScanQuery to account for LOST partitions - Fixes #5464.

Signed-off-by: Alexey Goncharuk <al...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/afe23b60
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/afe23b60
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/afe23b60

Branch: refs/heads/ignite-627
Commit: afe23b60bbbf4938cb7c471f20a59b51a7ad26a8
Parents: 64e0e69
Author: Alexey Platonov <ap...@gmail.com>
Authored: Tue Dec 18 17:35:34 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Dec 18 17:35:34 2018 +0300

----------------------------------------------------------------------
 .../cache/query/GridCacheQueryAdapter.java      | 25 +++++++++++++++++---
 .../IgniteCachePartitionLossPolicySelfTest.java | 24 ++++++++++++++++---
 2 files changed, 43 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/afe23b60/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
index 36ee3ba..6f3772c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/query/GridCacheQueryAdapter.java
@@ -33,6 +33,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.cache.CacheMode;
+import org.apache.ignite.cache.PartitionLossPolicy;
 import org.apache.ignite.cache.query.Query;
 import org.apache.ignite.cache.query.QueryMetrics;
 import org.apache.ignite.cluster.ClusterGroup;
@@ -537,9 +538,17 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
         cctx.checkSecurity(SecurityPermission.CACHE_READ);
 
         if (nodes.isEmpty()) {
-            if (part != null && forceLocal)
-                throw new IgniteCheckedException("No queryable nodes for partition " + part
-                    + " [forced local query=" + this + "]");
+            if (part != null) {
+                if (forceLocal) {
+                    throw new IgniteCheckedException("No queryable nodes for partition " + part
+                        + " [forced local query=" + this + "]");
+                }
+
+                if (isSafeLossPolicy()) {
+                    throw new IgniteCheckedException("Failed to execute scan query because cache partition has been " +
+                        "lost [cacheName=" + cctx.name() + ", part=" + part + "]");
+                }
+            }
 
             return new GridEmptyCloseableIterator();
         }
@@ -588,6 +597,16 @@ public class GridCacheQueryAdapter<T> implements CacheQuery<T> {
     }
 
     /**
+     * @return true if current PartitionLossPolicy corresponds to *_SAFE values.
+     */
+    private boolean isSafeLossPolicy() {
+        PartitionLossPolicy lossPlc = cctx.cache().configuration().getPartitionLossPolicy();
+
+        return lossPlc == PartitionLossPolicy.READ_ONLY_SAFE ||
+            lossPlc == PartitionLossPolicy.READ_WRITE_SAFE;
+    }
+
+    /**
      * @return Nodes to execute on.
      */
     private Collection<ClusterNode> nodes() throws IgniteCheckedException {

http://git-wip-us.apache.org/repos/asf/ignite/blob/afe23b60/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
index 3855c39..70d139f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/IgniteCachePartitionLossPolicySelfTest.java
@@ -32,6 +32,7 @@ import javax.cache.CacheException;
 import junit.framework.AssertionFailedError;
 import org.apache.ignite.Ignite;
 import org.apache.ignite.IgniteCache;
+import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.cache.PartitionLossPolicy;
 import org.apache.ignite.cache.affinity.Affinity;
 import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
@@ -837,9 +838,26 @@ public class IgniteCachePartitionLossPolicySelfTest extends GridCommonAbstractTe
      * @param parts Partitions.
      */
     protected void checkQueryFails(Ignite node, boolean loc, int... parts) {
-        // TODO Scan queries never fail due to partition loss - https://issues.apache.org/jira/browse/IGNITE-9902.
-        // TODO Need to add an actual check after https://issues.apache.org/jira/browse/IGNITE-9902 is fixed.
-        // No-op.
+        if (parts.length == 0)
+            return;
+
+        IgniteCache cache = node.cache(DEFAULT_CACHE_NAME);
+
+        String msg = loc ? "forced local query" : "partition has been lost";
+        GridTestUtils.assertThrows(log, () -> {
+            List res = null;
+            for (int partition : parts) {
+                ScanQuery qry = new ScanQuery();
+                qry.setPartition(partition);
+
+                if (loc)
+                    qry.setLocal(true);
+
+                res = cache.query(qry).getAll();
+            }
+
+            return res;
+        }, IgniteCheckedException.class, msg);
     }
 
     /** */


[16/52] [abbrv] ignite git commit: IGNITE-9308 Add baseline topology command to REST API. - Fixes #5019.

Posted by sb...@apache.org.
IGNITE-9308 Add baseline topology command to REST API. - Fixes #5019.

Signed-off-by: Andrey Novikov <an...@gridgain.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/7c2ce4c7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/7c2ce4c7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/7c2ce4c7

Branch: refs/heads/ignite-627
Commit: 7c2ce4c7488253590885f75335b6d9209771fa46
Parents: c1edb30
Author: Andrey Novikov <an...@gridgain.com>
Authored: Tue Dec 18 17:34:27 2018 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Tue Dec 18 17:34:27 2018 +0700

----------------------------------------------------------------------
 .../client/suite/IgniteClientTestSuite.java     |   2 +
 .../JettyRestProcessorBaselineSelfTest.java     | 221 +++++++++++++++++++
 .../processors/rest/GridRestCommand.java        |  12 +
 .../processors/rest/GridRestProcessor.java      |   6 +
 .../cluster/GridBaselineCommandHandler.java     | 205 +++++++++++++++++
 .../cluster/GridBaselineCommandResponse.java    | 161 ++++++++++++++
 .../rest/request/GridRestBaselineRequest.java   |  65 ++++++
 .../http/jetty/GridJettyRestHandler.java        |  16 ++
 8 files changed, 688 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/clients/src/test/java/org/apache/ignite/internal/client/suite/IgniteClientTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/client/suite/IgniteClientTestSuite.java b/modules/clients/src/test/java/org/apache/ignite/internal/client/suite/IgniteClientTestSuite.java
index ff27354..d20da01 100644
--- a/modules/clients/src/test/java/org/apache/ignite/internal/client/suite/IgniteClientTestSuite.java
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/client/suite/IgniteClientTestSuite.java
@@ -55,6 +55,7 @@ import org.apache.ignite.internal.processors.rest.ChangeStateCommandHandlerTest;
 import org.apache.ignite.internal.processors.rest.ClientMemcachedProtocolSelfTest;
 import org.apache.ignite.internal.processors.rest.JettyRestProcessorAuthenticationWithCredsSelfTest;
 import org.apache.ignite.internal.processors.rest.JettyRestProcessorAuthenticationWithTokenSelfTest;
+import org.apache.ignite.internal.processors.rest.JettyRestProcessorBaselineSelfTest;
 import org.apache.ignite.internal.processors.rest.JettyRestProcessorGetAllAsArrayTest;
 import org.apache.ignite.internal.processors.rest.JettyRestProcessorSignedSelfTest;
 import org.apache.ignite.internal.processors.rest.JettyRestProcessorUnsignedSelfTest;
@@ -100,6 +101,7 @@ public class IgniteClientTestSuite extends TestSuite {
         suite.addTest(new JUnit4TestAdapter(JettyRestProcessorAuthenticationWithCredsSelfTest.class));
         suite.addTest(new JUnit4TestAdapter(JettyRestProcessorAuthenticationWithTokenSelfTest.class));
         suite.addTest(new JUnit4TestAdapter(JettyRestProcessorGetAllAsArrayTest.class));
+        suite.addTest(new JUnit4TestAdapter(JettyRestProcessorBaselineSelfTest.class));
 
         // Test TCP rest processor with original memcache client.
         suite.addTest(new JUnit4TestAdapter(ClientMemcachedProtocolSelfTest.class));

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorBaselineSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorBaselineSelfTest.java b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorBaselineSelfTest.java
new file mode 100644
index 0000000..d3bfce8
--- /dev/null
+++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorBaselineSelfTest.java
@@ -0,0 +1,221 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import org.apache.ignite.cluster.BaselineNode;
+import org.apache.ignite.configuration.DataRegionConfiguration;
+import org.apache.ignite.configuration.DataStorageConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.processors.rest.handlers.cluster.GridBaselineCommandResponse;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.internal.U;
+import org.jetbrains.annotations.Nullable;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import static org.apache.ignite.configuration.WALMode.NONE;
+import static org.apache.ignite.internal.processors.rest.GridRestResponse.STATUS_SUCCESS;
+
+/**
+ * Test REST with enabled authentication.
+ */
+@RunWith(JUnit4.class)
+public class JettyRestProcessorBaselineSelfTest extends JettyRestProcessorCommonSelfTest {
+    /** {@inheritDoc} */
+    @Override protected void beforeTestsStarted() throws Exception {
+        U.resolveWorkDirectory(U.defaultWorkDirectory(), "db", true);
+
+        super.beforeTestsStarted();
+
+        // We need to activate cluster.
+        grid(0).cluster().active(true);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void afterTest() throws Exception {
+        super.afterTest();
+
+        grid(0).cluster().setBaselineTopology(grid(0).cluster().topologyVersion());
+    }
+
+    /** {@inheritDoc} */
+    @Override protected String signature() {
+        return null;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        DataStorageConfiguration dsCfg = new DataStorageConfiguration()
+            .setDefaultDataRegionConfiguration(new DataRegionConfiguration()
+                .setMaxSize(100 * 1024 * 1024)
+                .setPersistenceEnabled(true))
+            .setWalMode(NONE);
+
+        cfg.setDataStorageConfiguration(dsCfg);
+
+        return cfg;
+    }
+
+    /**
+     * @param nodes Collection of grid nodes.
+     * @return Collection of node consistent IDs for given collection of grid nodes.
+     */
+    private static Collection<String> nodeConsistentIds(@Nullable Collection<? extends BaselineNode> nodes) {
+        if (nodes == null || nodes.isEmpty())
+            return Collections.emptyList();
+
+        return F.viewReadOnly(nodes, n -> String.valueOf(n.consistentId()));
+    }
+
+    /**
+     * @param content Content to check.
+     * @param baselineSz Expected baseline size.
+     * @param srvsSz Expected server nodes count.
+     */
+    private void assertBaseline(String content, int baselineSz, int srvsSz) throws IOException {
+        assertNotNull(content);
+        assertFalse(content.isEmpty());
+
+        JsonNode node = JSON_MAPPER.readTree(content);
+
+        assertEquals(STATUS_SUCCESS, node.get("successStatus").asInt());
+        assertTrue(node.get("error").isNull());
+
+        assertNotSame(securityEnabled(), node.get("sessionToken").isNull());
+
+        JsonNode res = node.get("response");
+
+        assertFalse(res.isNull());
+
+        GridBaselineCommandResponse baseline = JSON_MAPPER.treeToValue(res, GridBaselineCommandResponse.class);
+
+        assertTrue(baseline.isActive());
+        assertEquals(grid(0).cluster().topologyVersion(), baseline.getTopologyVersion());
+        assertEquals(baselineSz, baseline.getBaseline().size());
+        assertEqualsCollections(nodeConsistentIds(grid(0).cluster().currentBaselineTopology()), baseline.getBaseline());
+        assertEquals(srvsSz, baseline.getServers().size());
+        assertEqualsCollections(nodeConsistentIds(grid(0).cluster().nodes()), baseline.getServers());
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testBaseline() throws Exception {
+        int sz = gridCount();
+        
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz);
+
+        // Stop one node. It will stay in baseline.
+        stopGrid(sz - 1);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz - 1);
+
+        // Start one node. Server node will be added, but baseline will not change.
+        startGrid(sz - 1);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testBaselineSet() throws Exception {
+        int sz = gridCount();
+        
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz);
+
+        startGrid(sz);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz + 1);
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_SET, "topVer",
+            String.valueOf(grid(0).cluster().topologyVersion())), sz + 1, sz + 1);
+
+        stopGrid(sz);
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz + 1, sz);
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_SET, "topVer",
+            String.valueOf(grid(0).cluster().topologyVersion())), sz, sz);
+
+        startGrid(sz);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz + 1);
+
+        ArrayList<String> params = new ArrayList<>();
+        int i = 1;
+
+        for (BaselineNode n : grid(0).cluster().nodes()) {
+            params.add("consistentId" + i++);
+            params.add(String.valueOf(n.consistentId()));
+        }
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_SET, params.toArray(new String[0])),
+            sz + 1, sz + 1);
+
+        stopGrid(sz);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testBaselineAdd() throws Exception {
+        int sz = gridCount();
+        
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz);
+
+        startGrid(sz);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz + 1);
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_ADD, "consistentId1",
+            grid(sz).localNode().consistentId().toString()), sz + 1, sz + 1);
+        
+        stopGrid(sz);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    @Test
+    public void testBaselineRemove() throws Exception {
+        int sz = gridCount();
+        
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz);
+
+        startGrid(sz);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz, sz + 1);
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_SET, "topVer",
+            String.valueOf(grid(0).cluster().topologyVersion())), sz + 1, sz + 1);
+
+        String consistentId = grid(sz).localNode().consistentId().toString();
+
+        stopGrid(sz);
+        assertBaseline(content(null, GridRestCommand.BASELINE_CURRENT_STATE), sz + 1, sz);
+
+        assertBaseline(content(null, GridRestCommand.BASELINE_REMOVE, "consistentId1",
+            consistentId), sz, sz);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
index 587ed2e..4046b15 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java
@@ -177,6 +177,18 @@ public enum GridRestCommand {
     CLUSTER_CURRENT_STATE("currentstate"),
 
     /** */
+    BASELINE_CURRENT_STATE("baseline"),
+
+    /** */
+    BASELINE_SET("setbaseline"),
+
+    /** */
+    BASELINE_ADD("addbaseline"),
+
+    /** */
+    BASELINE_REMOVE("removebaseline"),
+
+    /** */
     AUTHENTICATE("authenticate"),
 
     /** */

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index 7db0721..f24c4d3 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -49,6 +49,7 @@ import org.apache.ignite.internal.processors.rest.client.message.GridClientTaskR
 import org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandler;
 import org.apache.ignite.internal.processors.rest.handlers.auth.AuthenticationCommandHandler;
 import org.apache.ignite.internal.processors.rest.handlers.cache.GridCacheCommandHandler;
+import org.apache.ignite.internal.processors.rest.handlers.cluster.GridBaselineCommandHandler;
 import org.apache.ignite.internal.processors.rest.handlers.cluster.GridChangeStateCommandHandler;
 import org.apache.ignite.internal.processors.rest.handlers.datastructures.DataStructuresCommandHandler;
 import org.apache.ignite.internal.processors.rest.handlers.log.GridLogCommandHandler;
@@ -531,6 +532,7 @@ public class GridRestProcessor extends GridProcessorAdapter {
             addHandler(new GridChangeStateCommandHandler(ctx));
             addHandler(new AuthenticationCommandHandler(ctx));
             addHandler(new UserActionCommandHandler(ctx));
+            addHandler(new GridBaselineCommandHandler(ctx));
 
             // Start protocols.
             startTcpProtocol();
@@ -895,6 +897,9 @@ public class GridRestProcessor extends GridProcessorAdapter {
             case CLUSTER_INACTIVE:
             case CLUSTER_ACTIVATE:
             case CLUSTER_DEACTIVATE:
+            case BASELINE_SET:
+            case BASELINE_ADD:
+            case BASELINE_REMOVE:
                 perm = SecurityPermission.ADMIN_OPS;
 
                 break;
@@ -912,6 +917,7 @@ public class GridRestProcessor extends GridProcessorAdapter {
             case NAME:
             case LOG:
             case CLUSTER_CURRENT_STATE:
+            case BASELINE_CURRENT_STATE:
             case AUTHENTICATE:
             case ADD_USER:
             case REMOVE_USER:

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandHandler.java
new file mode 100644
index 0000000..88fde87
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandHandler.java
@@ -0,0 +1,205 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.handlers.cluster;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.cluster.BaselineNode;
+import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.cluster.IgniteClusterEx;
+import org.apache.ignite.internal.processors.rest.GridRestCommand;
+import org.apache.ignite.internal.processors.rest.GridRestResponse;
+import org.apache.ignite.internal.processors.rest.handlers.GridRestCommandHandlerAdapter;
+import org.apache.ignite.internal.processors.rest.request.GridRestBaselineRequest;
+import org.apache.ignite.internal.processors.rest.request.GridRestRequest;
+import org.apache.ignite.internal.util.future.GridFinishedFuture;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toMap;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.BASELINE_ADD;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.BASELINE_CURRENT_STATE;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.BASELINE_REMOVE;
+import static org.apache.ignite.internal.processors.rest.GridRestCommand.BASELINE_SET;
+
+/**
+ *
+ */
+public class GridBaselineCommandHandler extends GridRestCommandHandlerAdapter {
+    /** Supported commands. */
+    private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList(BASELINE_CURRENT_STATE,
+        BASELINE_SET, BASELINE_ADD, BASELINE_REMOVE);
+
+    /**
+     * @param ctx Context.
+     */
+    public GridBaselineCommandHandler(GridKernalContext ctx) {
+        super(ctx);
+    }
+
+    /** {@inheritDoc} */
+    @Override public Collection<GridRestCommand> supportedCommands() {
+        return SUPPORTED_COMMANDS;
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteInternalFuture<GridRestResponse> handleAsync(GridRestRequest req) {
+        assert req != null;
+
+        assert SUPPORTED_COMMANDS.contains(req.command());
+        assert req instanceof GridRestBaselineRequest : "Invalid type of baseline request.";
+
+
+        if (log.isDebugEnabled())
+            log.debug("Handling baseline REST request: " + req);
+
+        GridRestBaselineRequest req0 = (GridRestBaselineRequest)req;
+        
+        try {
+            IgniteClusterEx cluster = ctx.grid().cluster();
+
+            List<Object> consistentIds = req0.consistentIds();
+
+            switch (req0.command()) {
+                case BASELINE_CURRENT_STATE: {
+                    // No-op.
+
+                    break;
+                }
+
+                case BASELINE_SET: {
+                    Long topVer = req0.topologyVersion();
+
+                    if (topVer == null && consistentIds == null)
+                        throw new IgniteCheckedException("Failed to handle request (either topVer or consistentIds should be specified).");
+
+                    if (topVer != null)
+                        cluster.setBaselineTopology(topVer);
+                    else
+                        cluster.setBaselineTopology(filterServerNodesByConsId(consistentIds));
+
+                    break;
+                }
+
+                case BASELINE_ADD: {
+                    if (consistentIds == null)
+                        throw new IgniteCheckedException(missingParameter("consistentIds"));
+
+                    Set<BaselineNode> baselineTop = new HashSet<>(currentBaseLine());
+
+                    baselineTop.addAll(filterServerNodesByConsId(consistentIds));
+
+                    cluster.setBaselineTopology(baselineTop);
+
+                    break;
+                }
+
+                case BASELINE_REMOVE: {
+                    if (consistentIds == null)
+                        throw new IgniteCheckedException(missingParameter("consistentIds"));
+
+                    Collection<BaselineNode> baseline = currentBaseLine();
+
+                    Set<BaselineNode> baselineTop = new HashSet<>(baseline);
+
+                    baselineTop.removeAll(filterNodesByConsId(baseline, consistentIds));
+
+                    cluster.setBaselineTopology(baselineTop);
+
+                    break;
+                }
+
+                default:
+                    assert false : "Invalid command for baseline handler: " + req;
+            }
+
+            return new GridFinishedFuture<>(new GridRestResponse(currentState()));
+        }
+        catch (IgniteCheckedException e) {
+            return new GridFinishedFuture<>(e);
+        }
+        finally {
+            if (log.isDebugEnabled())
+                log.debug("Handled baseline REST request: " + req);
+        }
+    }
+
+    /**
+     * @return Current baseline.
+     */
+    private Collection<BaselineNode> currentBaseLine() {
+        Collection<BaselineNode> baselineNodes = ctx.grid().cluster().currentBaselineTopology();
+
+        return baselineNodes != null ? baselineNodes : Collections.emptyList();
+    }
+
+    /**
+     * Collect baseline topology command result.
+     *
+     * @return Baseline descriptor.
+     */
+    private GridBaselineCommandResponse currentState() {
+        IgniteClusterEx cluster = ctx.grid().cluster();
+
+        Collection<? extends BaselineNode> srvrs = cluster.forServers().nodes();
+
+        return new GridBaselineCommandResponse(cluster.active(), cluster.topologyVersion(), currentBaseLine(), srvrs);
+    }
+
+    /**
+     * Filter passed nodes by consistent IDs.
+     *
+     * @param nodes Collection of nodes.
+     * @param consistentIds Collection of consistent IDs.
+     * @throws IllegalStateException In case of some consistent ID not found in nodes collection.
+     */
+    private Collection<BaselineNode> filterNodesByConsId(Collection<? extends BaselineNode> nodes, List<Object> consistentIds) {
+        Map<Object, BaselineNode> nodeMap =
+            nodes.stream().collect(toMap(n -> n.consistentId().toString(), identity()));
+
+        Collection<BaselineNode> filtered = new ArrayList<>(consistentIds.size());
+
+        for (Object consistentId : consistentIds) {
+            BaselineNode node = nodeMap.get(consistentId);
+
+            if (node == null)
+                throw new IllegalStateException("Node not found for consistent ID: " + consistentId);
+
+            filtered.add(node);
+        }
+
+        return filtered;
+    }
+
+    /**
+     * Filter server nodes by consistent IDs.
+     *
+     * @param consistentIds Collection of consistent IDs to add.
+     * @throws IllegalStateException In case of some consistent ID not found in nodes collection.
+     */
+    private Collection<BaselineNode> filterServerNodesByConsId(List<Object> consistentIds) {
+        return filterNodesByConsId(ctx.grid().cluster().forServers().nodes(), consistentIds);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandResponse.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandResponse.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandResponse.java
new file mode 100644
index 0000000..aae16c0
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cluster/GridBaselineCommandResponse.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.handlers.cluster;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.util.Collection;
+import org.apache.ignite.cluster.BaselineNode;
+import org.apache.ignite.internal.util.typedef.internal.S;
+import org.apache.ignite.internal.util.typedef.internal.U;
+
+import static java.util.stream.Collectors.toList;
+
+/**
+ * Result for baseline command.
+ */
+public class GridBaselineCommandResponse implements Externalizable {
+    /** */
+    private static final long serialVersionUID = 0L;
+
+    /** Cluster state. */
+    private boolean active;
+
+    /** Current topology version. */
+    private long topVer;
+
+    /** Current baseline nodes. */
+    private Collection<String> baseline;
+
+    /** Current server nodes. */
+    private Collection<String> srvs;
+
+    /**
+     * @param nodes Nodes to process.
+     * @return Collection of consistentIds.
+     */
+    private static Collection<String> consistentIds(Collection<? extends BaselineNode> nodes) {
+        return nodes.stream().map(n -> String.valueOf(n.consistentId())).collect(toList());
+    }
+
+    /**
+     * Default constructor.
+     */
+    public GridBaselineCommandResponse() {
+        // No-op.
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param active Cluster state.
+     * @param topVer Current topology version.
+     * @param baseline Current baseline nodes.
+     * @param srvs Current server nodes.
+     */
+    GridBaselineCommandResponse(
+        boolean active,
+        long topVer,
+        Collection<? extends BaselineNode> baseline,
+        Collection<? extends BaselineNode> srvs
+    ) {
+        this.active = active;
+        this.topVer = topVer;
+        this.baseline = consistentIds(baseline);
+        this.srvs = consistentIds(srvs);
+    }
+
+    /**
+     * @return Cluster state.
+     */
+    public boolean isActive() {
+        return active;
+    }
+
+    /**
+     * @param active Cluster active.
+     */
+    public void setActive(boolean active) {
+        this.active = active;
+    }
+
+    /**
+     * @return Current topology version.
+     */
+    public long getTopologyVersion() {
+        return topVer;
+    }
+
+    /**
+     * @param topVer Current topology version.
+     */
+    public void setTopologyVersion(long topVer) {
+        this.topVer = topVer;
+    }
+
+    /**
+     * @return Baseline nodes.
+     */
+    public Collection<String> getBaseline() {
+        return baseline;
+    }
+
+    /**
+     * @param baseline Baseline nodes.
+     */
+    public void setBaseline(Collection<String> baseline) {
+        this.baseline = baseline;
+    }
+
+    /**
+     * @return Server nodes.
+     */
+    public Collection<String> getServers() {
+        return srvs;
+    }
+
+    /**
+     * @param srvs Server nodes.
+     */
+    public void setServers(Collection<String> srvs) {
+        this.srvs = srvs;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void writeExternal(ObjectOutput out) throws IOException {
+        out.writeBoolean(active);
+        out.writeLong(topVer);
+        U.writeCollection(out, baseline);
+        U.writeCollection(out, srvs);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+        active = in.readBoolean();
+        topVer = in.readLong();
+        baseline = U.readCollection(in);
+        srvs = U.readCollection(in);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(GridBaselineCommandResponse.class, this);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestBaselineRequest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestBaselineRequest.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestBaselineRequest.java
new file mode 100644
index 0000000..a3aa042
--- /dev/null
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/request/GridRestBaselineRequest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.rest.request;
+
+import java.util.List;
+import org.apache.ignite.internal.util.typedef.internal.S;
+
+/**
+ * Grid command topology request.
+ */
+public class GridRestBaselineRequest extends GridRestRequest {
+    /** Topology version to set. */
+    private Long topVer;
+
+    /** Collection of consistent IDs to set. */
+    private List<Object> consistentIds;
+
+    /**
+     * @return Topology version to set.
+     */
+    public Long topologyVersion() {
+        return topVer;
+    }
+
+    /**
+     * @param topVer New topology version to set.
+     */
+    public void topologyVersion(Long topVer) {
+        this.topVer = topVer;
+    }
+
+    /**
+     * @return Collection of consistent IDs to set.
+     */
+    public List<Object> consistentIds() {
+        return consistentIds;
+    }
+
+    /**
+     * @param consistentIds New collection of consistent IDs to set.
+     */
+    public void consistentIds(List<Object> consistentIds) {
+        this.consistentIds = consistentIds;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String toString() {
+        return S.toString(GridRestBaselineRequest.class, this, super.toString());
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/7c2ce4c7/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
----------------------------------------------------------------------
diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
index 000f980..41642c3 100644
--- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
+++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java
@@ -51,6 +51,7 @@ import org.apache.ignite.internal.processors.rest.GridRestCommand;
 import org.apache.ignite.internal.processors.rest.GridRestProtocolHandler;
 import org.apache.ignite.internal.processors.rest.GridRestResponse;
 import org.apache.ignite.internal.processors.rest.request.DataStructuresRequest;
+import org.apache.ignite.internal.processors.rest.request.GridRestBaselineRequest;
 import org.apache.ignite.internal.processors.rest.request.GridRestCacheRequest;
 import org.apache.ignite.internal.processors.rest.request.GridRestChangeStateRequest;
 import org.apache.ignite.internal.processors.rest.request.GridRestLogRequest;
@@ -633,6 +634,7 @@ public class GridJettyRestHandler extends AbstractHandler {
             case CACHE_CAS:
             case CACHE_METRICS:
             case CACHE_SIZE:
+            case CACHE_UPDATE_TLL:
             case CACHE_METADATA:
             case CACHE_REPLACE:
             case CACHE_APPEND:
@@ -759,6 +761,20 @@ public class GridJettyRestHandler extends AbstractHandler {
                 break;
             }
 
+            case BASELINE_CURRENT_STATE:
+            case BASELINE_SET:
+            case BASELINE_ADD:
+            case BASELINE_REMOVE: {
+                GridRestBaselineRequest restReq0 = new GridRestBaselineRequest();
+
+                restReq0.topologyVersion(longValue("topVer", params, null));
+                restReq0.consistentIds(values(null, "consistentId", params));
+
+                restReq = restReq0;
+
+                break;
+            }
+
             case AUTHENTICATE: {
                 restReq = new GridRestRequest();
 


[07/52] [abbrv] ignite git commit: IGNITE-10716: ctx.security().onSessionExpired(subjid) is called on rest session expiration now. - Fixes #5682.

Posted by sb...@apache.org.
IGNITE-10716: ctx.security().onSessionExpired(subjid) is called on rest session expiration now. - Fixes #5682.

Signed-off-by: Ilya Kasnacheev <il...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/91a82a5b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/91a82a5b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/91a82a5b

Branch: refs/heads/ignite-627
Commit: 91a82a5b6c48014a899157e135cdac9d3af42b3d
Parents: 5fb803a
Author: Andrei Aleksandrov <ae...@gmail.com>
Authored: Mon Dec 17 17:34:14 2018 +0300
Committer: Ilya Kasnacheev <il...@gmail.com>
Committed: Mon Dec 17 17:34:14 2018 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/processors/rest/GridRestProcessor.java | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/91a82a5b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
index 30d2f0a..7db0721 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java
@@ -500,6 +500,9 @@ public class GridRestProcessor extends GridProcessorAdapter {
                             if (ses.isTimedOut(sesTtl)) {
                                 clientId2SesId.remove(ses.clientId, ses.sesId);
                                 sesId2Ses.remove(ses.sesId, ses);
+
+                                if (ctx.security().enabled() && ses.secCtx != null && ses.secCtx.subject() != null)
+                                    ctx.security().onSessionExpired(ses.secCtx.subject().id());
                             }
                         }
                     }


[25/52] [abbrv] ignite git commit: IGNITE-10289: [ML] Import models from XGBoost

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.java
new file mode 100644
index 0000000..e202eba
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParser.java
@@ -0,0 +1,966 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import java.util.List;
+import org.antlr.v4.runtime.NoViableAltException;
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.ParserRuleContext;
+import org.antlr.v4.runtime.RecognitionException;
+import org.antlr.v4.runtime.RuntimeMetaData;
+import org.antlr.v4.runtime.Token;
+import org.antlr.v4.runtime.TokenStream;
+import org.antlr.v4.runtime.Vocabulary;
+import org.antlr.v4.runtime.VocabularyImpl;
+import org.antlr.v4.runtime.atn.ATN;
+import org.antlr.v4.runtime.atn.ATNDeserializer;
+import org.antlr.v4.runtime.atn.ParserATNSimulator;
+import org.antlr.v4.runtime.atn.PredictionContextCache;
+import org.antlr.v4.runtime.dfa.DFA;
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+import org.antlr.v4.runtime.tree.TerminalNode;
+
+/**
+ * XGBoost model parser generated by ANTLR.
+ */
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class XGBoostModelParser extends Parser {
+    /** ANTLR version checker. */
+    static {
+        RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION);
+    }
+
+    /** DFA. */
+    protected static final DFA[] _decisionToDFA;
+
+    /** Shared context cache. */
+    protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
+
+    /** */
+    public static final int
+        YES = 1, NO = 2, MISSING = 3, EQ = 4, COMMA = 5, PLUS = 6, MINUS = 7, DOT = 8, EXP = 9,
+        BOOSTER = 10, LBRACK = 11, RBRACK = 12, COLON = 13, LEAF = 14, INT = 15, DOUBLE = 16,
+        STRING = 17, NEWLINE = 18, LT = 19, WS = 20;
+
+    /** */
+    public static final int
+        RULE_xgValue = 0, RULE_xgHeader = 1, RULE_xgNode = 2, RULE_xgLeaf = 3,
+        RULE_xgTree = 4, RULE_xgModel = 5;
+
+    /** Rule names. */
+    public static final String[] ruleNames = {
+        "xgValue", "xgHeader", "xgNode", "xgLeaf", "xgTree", "xgModel"
+    };
+
+    /** Literal names. */
+    private static final String[] _LITERAL_NAMES = {
+        null, "'yes'", "'no'", "'missing'", "'='", "','", "'+'", "'-'", "'.'",
+        null, "'booster'", "'['", "']'", "':'", "'leaf'", null, null, null, null,
+        "'<'"
+    };
+
+    /** Symbolic names. */
+    private static final String[] _SYMBOLIC_NAMES = {
+        null, "YES", "NO", "MISSING", "EQ", "COMMA", "PLUS", "MINUS", "DOT", "EXP",
+        "BOOSTER", "LBRACK", "RBRACK", "COLON", "LEAF", "INT", "DOUBLE", "STRING",
+        "NEWLINE", "LT", "WS"
+    };
+
+    /** Vocabulary. */
+    public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+    /**
+     * Token names.
+     *
+     * @deprecated Use {@link #VOCABULARY} instead.
+     */
+    @Deprecated
+    public static final String[] tokenNames;
+
+    /** */
+    static {
+        tokenNames = new String[_SYMBOLIC_NAMES.length];
+        for (int i = 0; i < tokenNames.length; i++) {
+            tokenNames[i] = VOCABULARY.getLiteralName(i);
+            if (tokenNames[i] == null) {
+                tokenNames[i] = VOCABULARY.getSymbolicName(i);
+            }
+
+            if (tokenNames[i] == null) {
+                tokenNames[i] = "<INVALID>";
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Deprecated
+    @Override public String[] getTokenNames() {
+        return tokenNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Vocabulary getVocabulary() {
+        return VOCABULARY;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getGrammarFileName() {
+        return "XGBoostModel.g4";
+    }
+
+    /** {@inheritDoc} */
+    @Override public String[] getRuleNames() {
+        return ruleNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getSerializedATN() {
+        return _serializedATN;
+    }
+
+    /** {@inheritDoc} */
+    @Override public ATN getATN() {
+        return _ATN;
+    }
+
+    /**
+     * Constructs a new instance of XGBoost model parser.
+     *
+     * @param input Token stream.
+     */
+    public XGBoostModelParser(TokenStream input) {
+        super(input);
+        _interp = new ParserATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
+    }
+
+    /**
+     * XG value context.
+     */
+    public static class XgValueContext extends ParserRuleContext {
+        /** */
+        public TerminalNode DOUBLE() {
+            return getToken(XGBoostModelParser.DOUBLE, 0);
+        }
+
+        /** */
+        public TerminalNode INT() {
+            return getToken(XGBoostModelParser.INT, 0);
+        }
+
+        /**
+         * Constructs a new instance of XG value context.
+         *
+         * @param parent Parent.
+         * @param invokingState Invoking state.
+         */
+        public XgValueContext(ParserRuleContext parent, int invokingState) {
+            super(parent, invokingState);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int getRuleIndex() {
+            return RULE_xgValue;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void enterRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).enterXgValue(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void exitRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).exitXgValue(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+            if (visitor instanceof XGBoostModelVisitor)
+                return ((XGBoostModelVisitor<? extends T>)visitor).visitXgValue(this);
+            else
+                return visitor.visitChildren(this);
+        }
+    }
+
+    /**
+     * Returns XG value.
+     *
+     * @return XG value.
+     * @throws RecognitionException In case of exception.
+     */
+    public final XgValueContext xgValue() throws RecognitionException {
+        XgValueContext _localctx = new XgValueContext(_ctx, getState());
+        enterRule(_localctx, 0, RULE_xgValue);
+        int _la;
+        try {
+            enterOuterAlt(_localctx, 1);
+            {
+                setState(12);
+                _la = _input.LA(1);
+                if (!(_la == INT || _la == DOUBLE)) {
+                    _errHandler.recoverInline(this);
+                }
+                else {
+                    if (_input.LA(1) == Token.EOF)
+                        matchedEOF = true;
+                    _errHandler.reportMatch(this);
+                    consume();
+                }
+            }
+        }
+        catch (RecognitionException re) {
+            _localctx.exception = re;
+            _errHandler.reportError(this, re);
+            _errHandler.recover(this, re);
+        }
+        finally {
+            exitRule();
+        }
+        return _localctx;
+    }
+
+    /**
+     * XG header context.
+     */
+    public static class XgHeaderContext extends ParserRuleContext {
+        /** */
+        public TerminalNode BOOSTER() {
+            return getToken(XGBoostModelParser.BOOSTER, 0);
+        }
+
+        /** */
+        public TerminalNode LBRACK() {
+            return getToken(XGBoostModelParser.LBRACK, 0);
+        }
+
+        /** */
+        public TerminalNode INT() {
+            return getToken(XGBoostModelParser.INT, 0);
+        }
+
+        /** */
+        public TerminalNode RBRACK() {
+            return getToken(XGBoostModelParser.RBRACK, 0);
+        }
+
+        /** */
+        public TerminalNode COLON() {
+            return getToken(XGBoostModelParser.COLON, 0);
+        }
+
+        /**
+         * Constructs a new instance of XG header context.
+         *
+         * @param parent Parent.
+         * @param invokingState Invoking state.
+         */
+        public XgHeaderContext(ParserRuleContext parent, int invokingState) {
+            super(parent, invokingState);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int getRuleIndex() {
+            return RULE_xgHeader;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void enterRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).enterXgHeader(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void exitRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).exitXgHeader(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+            if (visitor instanceof XGBoostModelVisitor)
+                return ((XGBoostModelVisitor<? extends T>)visitor).visitXgHeader(this);
+            else
+                return visitor.visitChildren(this);
+        }
+    }
+
+    /**
+     * Returns XG header.
+     *
+     * @return XG header.
+     * @throws RecognitionException In case of exception.
+     */
+    public final XgHeaderContext xgHeader() throws RecognitionException {
+        XgHeaderContext _localctx = new XgHeaderContext(_ctx, getState());
+        enterRule(_localctx, 2, RULE_xgHeader);
+        int _la;
+        try {
+            enterOuterAlt(_localctx, 1);
+            {
+                setState(14);
+                match(BOOSTER);
+                setState(15);
+                match(LBRACK);
+                setState(16);
+                match(INT);
+                setState(17);
+                match(RBRACK);
+                setState(19);
+                _errHandler.sync(this);
+                _la = _input.LA(1);
+                if (_la == COLON) {
+                    {
+                        setState(18);
+                        match(COLON);
+                    }
+                }
+
+            }
+        }
+        catch (RecognitionException re) {
+            _localctx.exception = re;
+            _errHandler.reportError(this, re);
+            _errHandler.recover(this, re);
+        }
+        finally {
+            exitRule();
+        }
+        return _localctx;
+    }
+
+    /**
+     * XG node conext.
+     */
+    public static class XgNodeContext extends ParserRuleContext {
+        /** */
+        public List<TerminalNode> INT() {
+            return getTokens(XGBoostModelParser.INT);
+        }
+
+        /** */
+        public TerminalNode INT(int i) {
+            return getToken(XGBoostModelParser.INT, i);
+        }
+
+        /** */
+        public TerminalNode COLON() {
+            return getToken(XGBoostModelParser.COLON, 0);
+        }
+
+        /** */
+        public TerminalNode LBRACK() {
+            return getToken(XGBoostModelParser.LBRACK, 0);
+        }
+
+        /** */
+        public TerminalNode STRING() {
+            return getToken(XGBoostModelParser.STRING, 0);
+        }
+
+        /** */
+        public TerminalNode LT() {
+            return getToken(XGBoostModelParser.LT, 0);
+        }
+
+        /** */
+        public XgValueContext xgValue() {
+            return getRuleContext(XgValueContext.class, 0);
+        }
+
+        /** */
+        public TerminalNode RBRACK() {
+            return getToken(XGBoostModelParser.RBRACK, 0);
+        }
+
+        /** */
+        public TerminalNode YES() {
+            return getToken(XGBoostModelParser.YES, 0);
+        }
+
+        /** */
+        public List<TerminalNode> EQ() {
+            return getTokens(XGBoostModelParser.EQ);
+        }
+
+        /** */
+        public TerminalNode EQ(int i) {
+            return getToken(XGBoostModelParser.EQ, i);
+        }
+
+        /** */
+        public List<TerminalNode> COMMA() {
+            return getTokens(XGBoostModelParser.COMMA);
+        }
+
+        /** */
+        public TerminalNode COMMA(int i) {
+            return getToken(XGBoostModelParser.COMMA, i);
+        }
+
+        /** */
+        public TerminalNode NO() {
+            return getToken(XGBoostModelParser.NO, 0);
+        }
+
+        /** */
+        public TerminalNode MISSING() {
+            return getToken(XGBoostModelParser.MISSING, 0);
+        }
+
+        /**
+         * Constructs a new instance of XG node context.
+         *
+         * @param parent Parent.
+         * @param invokingState Invoking state.
+         */
+        public XgNodeContext(ParserRuleContext parent, int invokingState) {
+            super(parent, invokingState);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int getRuleIndex() {
+            return RULE_xgNode;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void enterRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).enterXgNode(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void exitRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).exitXgNode(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+            if (visitor instanceof XGBoostModelVisitor)
+                return ((XGBoostModelVisitor<? extends T>)visitor).visitXgNode(this);
+            else
+                return visitor.visitChildren(this);
+        }
+    }
+
+    /**
+     * Returns XG node.
+     *
+     * @return XG node.
+     * @throws RecognitionException In case of exception.
+     */
+    public final XgNodeContext xgNode() throws RecognitionException {
+        XgNodeContext _localctx = new XgNodeContext(_ctx, getState());
+        enterRule(_localctx, 4, RULE_xgNode);
+        try {
+            enterOuterAlt(_localctx, 1);
+            {
+                setState(21);
+                match(INT);
+                setState(22);
+                match(COLON);
+                setState(23);
+                match(LBRACK);
+                setState(24);
+                match(STRING);
+                setState(25);
+                match(LT);
+                setState(26);
+                xgValue();
+                setState(27);
+                match(RBRACK);
+                setState(28);
+                match(YES);
+                setState(29);
+                match(EQ);
+                setState(30);
+                match(INT);
+                setState(31);
+                match(COMMA);
+                setState(32);
+                match(NO);
+                setState(33);
+                match(EQ);
+                setState(34);
+                match(INT);
+                setState(35);
+                match(COMMA);
+                setState(36);
+                match(MISSING);
+                setState(37);
+                match(EQ);
+                setState(38);
+                match(INT);
+            }
+        }
+        catch (RecognitionException re) {
+            _localctx.exception = re;
+            _errHandler.reportError(this, re);
+            _errHandler.recover(this, re);
+        }
+        finally {
+            exitRule();
+        }
+        return _localctx;
+    }
+
+    /**
+     * XG leaf context.
+     */
+    public static class XgLeafContext extends ParserRuleContext {
+        /** */
+        public TerminalNode INT() {
+            return getToken(XGBoostModelParser.INT, 0);
+        }
+
+        /** */
+        public TerminalNode COLON() {
+            return getToken(XGBoostModelParser.COLON, 0);
+        }
+
+        /** */
+        public TerminalNode LEAF() {
+            return getToken(XGBoostModelParser.LEAF, 0);
+        }
+
+        /** */
+        public TerminalNode EQ() {
+            return getToken(XGBoostModelParser.EQ, 0);
+        }
+
+        /** */
+        public XgValueContext xgValue() {
+            return getRuleContext(XgValueContext.class, 0);
+        }
+
+        /**
+         * Constructs a new instance of XG leaf conext.
+         *
+         * @param parent Parent.
+         * @param invokingState Invoking state.
+         */
+        public XgLeafContext(ParserRuleContext parent, int invokingState) {
+            super(parent, invokingState);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int getRuleIndex() {
+            return RULE_xgLeaf;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void enterRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).enterXgLeaf(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void exitRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).exitXgLeaf(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+            if (visitor instanceof XGBoostModelVisitor)
+                return ((XGBoostModelVisitor<? extends T>)visitor).visitXgLeaf(this);
+            else
+                return visitor.visitChildren(this);
+        }
+    }
+
+    /**
+     * Returns XG leaf.
+     *
+     * @return XG leaf.
+     * @throws RecognitionException In case of exception.
+     */
+    public final XgLeafContext xgLeaf() throws RecognitionException {
+        XgLeafContext _localctx = new XgLeafContext(_ctx, getState());
+        enterRule(_localctx, 6, RULE_xgLeaf);
+        try {
+            enterOuterAlt(_localctx, 1);
+            {
+                setState(40);
+                match(INT);
+                setState(41);
+                match(COLON);
+                setState(42);
+                match(LEAF);
+                setState(43);
+                match(EQ);
+                setState(44);
+                xgValue();
+            }
+        }
+        catch (RecognitionException re) {
+            _localctx.exception = re;
+            _errHandler.reportError(this, re);
+            _errHandler.recover(this, re);
+        }
+        finally {
+            exitRule();
+        }
+        return _localctx;
+    }
+
+    /**
+     * XG tree context.
+     */
+    public static class XgTreeContext extends ParserRuleContext {
+        /** */
+        public XgHeaderContext xgHeader() {
+            return getRuleContext(XgHeaderContext.class, 0);
+        }
+
+        /** */
+        public List<TerminalNode> NEWLINE() {
+            return getTokens(XGBoostModelParser.NEWLINE);
+        }
+
+        /** */
+        public TerminalNode NEWLINE(int i) {
+            return getToken(XGBoostModelParser.NEWLINE, i);
+        }
+
+        /** */
+        public TerminalNode EOF() {
+            return getToken(XGBoostModelParser.EOF, 0);
+        }
+
+        /** */
+        public List<XgLeafContext> xgLeaf() {
+            return getRuleContexts(XgLeafContext.class);
+        }
+
+        /** */
+        public XgLeafContext xgLeaf(int i) {
+            return getRuleContext(XgLeafContext.class, i);
+        }
+
+        /** */
+        public List<XgNodeContext> xgNode() {
+            return getRuleContexts(XgNodeContext.class);
+        }
+
+        /** */
+        public XgNodeContext xgNode(int i) {
+            return getRuleContext(XgNodeContext.class, i);
+        }
+
+        /**
+         * Constructs a new instance of XG tree context.
+         *
+         * @param parent Parent.
+         * @param invokingState Invoking state.
+         */
+        public XgTreeContext(ParserRuleContext parent, int invokingState) {
+            super(parent, invokingState);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int getRuleIndex() {
+            return RULE_xgTree;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void enterRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).enterXgTree(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void exitRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).exitXgTree(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+            if (visitor instanceof XGBoostModelVisitor)
+                return ((XGBoostModelVisitor<? extends T>)visitor).visitXgTree(this);
+            else
+                return visitor.visitChildren(this);
+        }
+    }
+
+    /** */
+    public final XgTreeContext xgTree() throws RecognitionException {
+        XgTreeContext _localctx = new XgTreeContext(_ctx, getState());
+        enterRule(_localctx, 8, RULE_xgTree);
+        int _la;
+        try {
+            int _alt;
+            enterOuterAlt(_localctx, 1);
+            {
+                setState(46);
+                xgHeader();
+                setState(47);
+                match(NEWLINE);
+                setState(83);
+                _errHandler.sync(this);
+                switch (getInterpreter().adaptivePredict(_input, 8, _ctx)) {
+                    case 1: {
+                        setState(54);
+                        _errHandler.sync(this);
+                        _alt = 1;
+                        do {
+                            switch (_alt) {
+                                case 1: {
+                                    {
+                                        setState(50);
+                                        _errHandler.sync(this);
+                                        switch (getInterpreter().adaptivePredict(_input, 1, _ctx)) {
+                                            case 1: {
+                                                setState(48);
+                                                xgLeaf();
+                                            }
+                                            break;
+                                            case 2: {
+                                                setState(49);
+                                                xgNode();
+                                            }
+                                            break;
+                                        }
+                                        setState(52);
+                                        match(NEWLINE);
+                                    }
+                                }
+                                break;
+                                default:
+                                    throw new NoViableAltException(this);
+                            }
+                            setState(56);
+                            _errHandler.sync(this);
+                            _alt = getInterpreter().adaptivePredict(_input, 2, _ctx);
+                        }
+                        while (_alt != 2 && _alt != org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER);
+                        setState(64);
+                        _errHandler.sync(this);
+                        _la = _input.LA(1);
+                        if (_la == INT) {
+                            {
+                                setState(60);
+                                _errHandler.sync(this);
+                                switch (getInterpreter().adaptivePredict(_input, 3, _ctx)) {
+                                    case 1: {
+                                        setState(58);
+                                        xgLeaf();
+                                    }
+                                    break;
+                                    case 2: {
+                                        setState(59);
+                                        xgNode();
+                                    }
+                                    break;
+                                }
+                                setState(62);
+                                match(EOF);
+                            }
+                        }
+
+                    }
+                    break;
+                    case 2: {
+                        setState(74);
+                        _errHandler.sync(this);
+                        _alt = getInterpreter().adaptivePredict(_input, 6, _ctx);
+                        while (_alt != 2 && _alt != org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER) {
+                            if (_alt == 1) {
+                                {
+                                    {
+                                        setState(68);
+                                        _errHandler.sync(this);
+                                        switch (getInterpreter().adaptivePredict(_input, 5, _ctx)) {
+                                            case 1: {
+                                                setState(66);
+                                                xgLeaf();
+                                            }
+                                            break;
+                                            case 2: {
+                                                setState(67);
+                                                xgNode();
+                                            }
+                                            break;
+                                        }
+                                        setState(70);
+                                        match(NEWLINE);
+                                    }
+                                }
+                            }
+                            setState(76);
+                            _errHandler.sync(this);
+                            _alt = getInterpreter().adaptivePredict(_input, 6, _ctx);
+                        }
+                        setState(79);
+                        _errHandler.sync(this);
+                        switch (getInterpreter().adaptivePredict(_input, 7, _ctx)) {
+                            case 1: {
+                                setState(77);
+                                xgLeaf();
+                            }
+                            break;
+                            case 2: {
+                                setState(78);
+                                xgNode();
+                            }
+                            break;
+                        }
+                        setState(81);
+                        match(EOF);
+                    }
+                    break;
+                }
+            }
+        }
+        catch (RecognitionException re) {
+            _localctx.exception = re;
+            _errHandler.reportError(this, re);
+            _errHandler.recover(this, re);
+        }
+        finally {
+            exitRule();
+        }
+        return _localctx;
+    }
+
+    /**
+     * XG model context.
+     */
+    public static class XgModelContext extends ParserRuleContext {
+        /** */
+        public List<XgTreeContext> xgTree() {
+            return getRuleContexts(XgTreeContext.class);
+        }
+
+        /** */
+        public XgTreeContext xgTree(int i) {
+            return getRuleContext(XgTreeContext.class, i);
+        }
+
+        /**
+         * Constructs a new instance of XG model context.
+         *
+         * @param parent Parent.
+         * @param invokingState Invoking state.
+         */
+        public XgModelContext(ParserRuleContext parent, int invokingState) {
+            super(parent, invokingState);
+        }
+
+        /** {@inheritDoc} */
+        @Override public int getRuleIndex() {
+            return RULE_xgModel;
+        }
+
+        /** {@inheritDoc} */
+        @Override public void enterRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).enterXgModel(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void exitRule(ParseTreeListener listener) {
+            if (listener instanceof XGBoostModelListener)
+                ((XGBoostModelListener)listener).exitXgModel(this);
+        }
+
+        /** {@inheritDoc} */
+        @Override public <T> T accept(ParseTreeVisitor<? extends T> visitor) {
+            if (visitor instanceof XGBoostModelVisitor)
+                return ((XGBoostModelVisitor<? extends T>)visitor).visitXgModel(this);
+            else
+                return visitor.visitChildren(this);
+        }
+    }
+
+    /** */
+    public final XgModelContext xgModel() throws RecognitionException {
+        XgModelContext _localctx = new XgModelContext(_ctx, getState());
+        enterRule(_localctx, 10, RULE_xgModel);
+        int _la;
+        try {
+            enterOuterAlt(_localctx, 1);
+            {
+                setState(86);
+                _errHandler.sync(this);
+                _la = _input.LA(1);
+                do {
+                    {
+                        {
+                            setState(85);
+                            xgTree();
+                        }
+                    }
+                    setState(88);
+                    _errHandler.sync(this);
+                    _la = _input.LA(1);
+                }
+                while (_la == BOOSTER);
+            }
+        }
+        catch (RecognitionException re) {
+            _localctx.exception = re;
+            _errHandler.reportError(this, re);
+            _errHandler.recover(this, re);
+        }
+        finally {
+            exitRule();
+        }
+        return _localctx;
+    }
+
+    /** Serialized ATN. */
+    public static final String _serializedATN =
+        "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\26]\4\2\t\2\4\3\t" +
+            "\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\3\2\3\2\3\3\3\3\3\3\3\3\3\3\5\3\26" +
+            "\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3" +
+            "\4\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6\3\6\3\6\3\6\5\6\65\n\6\3\6\3\6" +
+            "\6\69\n\6\r\6\16\6:\3\6\3\6\5\6?\n\6\3\6\3\6\5\6C\n\6\3\6\3\6\5\6G\n\6" +
+            "\3\6\3\6\7\6K\n\6\f\6\16\6N\13\6\3\6\3\6\5\6R\n\6\3\6\3\6\5\6V\n\6\3\7" +
+            "\6\7Y\n\7\r\7\16\7Z\3\7\2\2\b\2\4\6\b\n\f\2\3\3\2\21\22\2`\2\16\3\2\2" +
+            "\2\4\20\3\2\2\2\6\27\3\2\2\2\b*\3\2\2\2\n\60\3\2\2\2\fX\3\2\2\2\16\17" +
+            "\t\2\2\2\17\3\3\2\2\2\20\21\7\f\2\2\21\22\7\r\2\2\22\23\7\21\2\2\23\25" +
+            "\7\16\2\2\24\26\7\17\2\2\25\24\3\2\2\2\25\26\3\2\2\2\26\5\3\2\2\2\27\30" +
+            "\7\21\2\2\30\31\7\17\2\2\31\32\7\r\2\2\32\33\7\23\2\2\33\34\7\25\2\2\34" +
+            "\35\5\2\2\2\35\36\7\16\2\2\36\37\7\3\2\2\37 \7\6\2\2 !\7\21\2\2!\"\7\7" +
+            "\2\2\"#\7\4\2\2#$\7\6\2\2$%\7\21\2\2%&\7\7\2\2&\'\7\5\2\2\'(\7\6\2\2(" +
+            ")\7\21\2\2)\7\3\2\2\2*+\7\21\2\2+,\7\17\2\2,-\7\20\2\2-.\7\6\2\2./\5\2" +
+            "\2\2/\t\3\2\2\2\60\61\5\4\3\2\61U\7\24\2\2\62\65\5\b\5\2\63\65\5\6\4\2" +
+            "\64\62\3\2\2\2\64\63\3\2\2\2\65\66\3\2\2\2\66\67\7\24\2\2\679\3\2\2\2" +
+            "8\64\3\2\2\29:\3\2\2\2:8\3\2\2\2:;\3\2\2\2;B\3\2\2\2<?\5\b\5\2=?\5\6\4" +
+            "\2><\3\2\2\2>=\3\2\2\2?@\3\2\2\2@A\7\2\2\3AC\3\2\2\2B>\3\2\2\2BC\3\2\2" +
+            "\2CV\3\2\2\2DG\5\b\5\2EG\5\6\4\2FD\3\2\2\2FE\3\2\2\2GH\3\2\2\2HI\7\24" +
+            "\2\2IK\3\2\2\2JF\3\2\2\2KN\3\2\2\2LJ\3\2\2\2LM\3\2\2\2MQ\3\2\2\2NL\3\2" +
+            "\2\2OR\5\b\5\2PR\5\6\4\2QO\3\2\2\2QP\3\2\2\2RS\3\2\2\2ST\7\2\2\3TV\3\2" +
+            "\2\2U8\3\2\2\2UL\3\2\2\2V\13\3\2\2\2WY\5\n\6\2XW\3\2\2\2YZ\3\2\2\2ZX\3" +
+            "\2\2\2Z[\3\2\2\2[\r\3\2\2\2\f\25\64:>BFLQUZ";
+
+    /** ATN. */
+    public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+
+    /** */
+    static {
+        _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+        for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+            _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.java
new file mode 100644
index 0000000..68621d6
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelVisitor.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+
+/**
+ * This interface defines a complete generic visitor for a parse tree produced
+ * by {@link XGBoostModelParser}.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+public interface XGBoostModelVisitor<T> extends ParseTreeVisitor<T> {
+    /**
+     * Visit a parse tree produced by {@link XGBoostModelParser#xgValue}.
+     * @param ctx the parse tree
+     * @return the visitor result
+     */
+    public T visitXgValue(XGBoostModelParser.XgValueContext ctx);
+
+    /**
+     * Visit a parse tree produced by {@link XGBoostModelParser#xgHeader}.
+     * @param ctx the parse tree
+     * @return the visitor result
+     */
+    public T visitXgHeader(XGBoostModelParser.XgHeaderContext ctx);
+
+    /**
+     * Visit a parse tree produced by {@link XGBoostModelParser#xgNode}.
+     * @param ctx the parse tree
+     * @return the visitor result
+     */
+    public T visitXgNode(XGBoostModelParser.XgNodeContext ctx);
+
+    /**
+     * Visit a parse tree produced by {@link XGBoostModelParser#xgLeaf}.
+     * @param ctx the parse tree
+     * @return the visitor result
+     */
+    public T visitXgLeaf(XGBoostModelParser.XgLeafContext ctx);
+
+    /**
+     * Visit a parse tree produced by {@link XGBoostModelParser#xgTree}.
+     * @param ctx the parse tree
+     * @return the visitor result
+     */
+    public T visitXgTree(XGBoostModelParser.XgTreeContext ctx);
+
+    /**
+     * Visit a parse tree produced by {@link XGBoostModelParser#xgModel}.
+     * @param ctx the parse tree
+     * @return the visitor result
+     */
+    public T visitXgModel(XGBoostModelParser.XgModelContext ctx);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGModelParser.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGModelParser.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGModelParser.java
new file mode 100644
index 0000000..a0b124f
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGModelParser.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.CharStreams;
+import org.antlr.v4.runtime.CommonTokenStream;
+import org.apache.ignite.ml.inference.parser.InfModelParser;
+import org.apache.ignite.ml.xgboost.XGModel;
+import org.apache.ignite.ml.xgboost.XGObject;
+import org.apache.ignite.ml.xgboost.parser.visitor.XGModelVisitor;
+
+/** XGBoost model parser. Uses the following ANTLR grammar to parse file:
+ * <pre>
+ * grammar XGBoostModel;
+ *
+ * YES : 'yes' ;
+ * NO : 'no' ;
+ * MISSING : 'missing' ;
+ * EQ : '=' ;
+ * COMMA : ',' ;
+ * PLUS : '+' ;
+ * MINUS : '-' ;
+ * DOT : '.' ;
+ * EXP : 'E' | 'e' ;
+ * BOOSTER : 'booster' ;
+ * LBRACK : '[' ;
+ * RBRACK : ']' ;
+ * COLON : ':' ;
+ * LEAF : 'leaf' ;
+ * INT : (PLUS | MINUS)? [0-9]+ ;
+ * DOUBLE : INT DOT [0-9]* (EXP INT)?;
+ * STRING : [A-Za-z_][0-9A-Za-z_]+ ;
+ * NEWLINE : '\r' '\n' | '\n' | '\r' ;
+ * LT : '<' ;
+ * WS : ( ' ' | '\t' )+ -> skip ;
+ *
+ * xgValue : DOUBLE | INT ;
+ * xgHeader : BOOSTER LBRACK INT RBRACK COLON? ;
+ * xgNode : INT COLON LBRACK STRING LT xgValue RBRACK YES EQ INT COMMA NO EQ INT COMMA MISSING EQ INT ;
+ * xgLeaf : INT COLON LEAF EQ xgValue ;
+ * xgTree : xgHeader NEWLINE (
+ *     ((xgLeaf | xgNode) NEWLINE)+ ((xgLeaf | xgNode) EOF)?
+ *     | ((xgLeaf | xgNode) NEWLINE)* (xgLeaf | xgNode) EOF
+ * ) ;
+ * xgModel : xgTree+ ;
+ * </pre>
+ */
+// TODO: IGNITE-10718 Merge XGBoost and Ignite ML trees together.
+public class XGModelParser implements InfModelParser<XGObject, Double> {
+    /** */
+    private static final long serialVersionUID = -5819843559270294718L;
+
+    /** {@inheritDoc} */
+    @Override public XGModel parse(byte[] mdl) {
+        try (ByteArrayInputStream bais = new ByteArrayInputStream(mdl)) {
+            CharStream cStream = CharStreams.fromStream(bais);
+            XGBoostModelLexer lexer = new XGBoostModelLexer(cStream);
+            CommonTokenStream tokens = new CommonTokenStream(lexer);
+            XGBoostModelParser parser = new XGBoostModelParser(tokens);
+
+            XGModelVisitor visitor = new XGModelVisitor();
+
+            return visitor.visit(parser.xgModel());
+        }
+        catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/package-info.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/package-info.java
new file mode 100644
index 0000000..959b3ba
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Base package for XGBoost model parser implementation.
+ */
+package org.apache.ignite.ml.xgboost.parser;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.java
new file mode 100644
index 0000000..70433c7
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGModelVisitor.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser.visitor;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.ignite.ml.xgboost.XGModel;
+import org.apache.ignite.ml.xgboost.XGNode;
+import org.apache.ignite.ml.xgboost.parser.XGBoostModelBaseVisitor;
+import org.apache.ignite.ml.xgboost.parser.XGBoostModelParser;
+
+/**
+ * XGBoost model visitor that parses model.
+ */
+public class XGModelVisitor extends XGBoostModelBaseVisitor<XGModel> {
+    /** Tree visitor. */
+    private final XGTreeVisitor treeVisitor = new XGTreeVisitor();
+
+    /** {@inheritDoc} */
+    @Override public XGModel visitXgModel(XGBoostModelParser.XgModelContext ctx) {
+        List<XGNode> trees = new ArrayList<>();
+
+        for (XGBoostModelParser.XgTreeContext treeCtx : ctx.xgTree())
+            trees.add(treeVisitor.visitXgTree(treeCtx));
+
+        return new XGModel(trees);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.java
new file mode 100644
index 0000000..60268ff
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/XGTreeVisitor.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser.visitor;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.antlr.v4.runtime.tree.TerminalNode;
+import org.apache.ignite.ml.xgboost.XGLeafNode;
+import org.apache.ignite.ml.xgboost.XGNode;
+import org.apache.ignite.ml.xgboost.XGSplitNode;
+import org.apache.ignite.ml.xgboost.parser.XGBoostModelBaseVisitor;
+import org.apache.ignite.ml.xgboost.parser.XGBoostModelParser;
+
+/**
+ * XGBoost tree visitor that parses tree.
+ */
+public class XGTreeVisitor extends XGBoostModelBaseVisitor<XGNode> {
+    /** Index of the root node. */
+    private static final int ROOT_NODE_IDX = 0;
+
+    /** {@inheritDoc} */
+    @Override public XGNode visitXgTree(XGBoostModelParser.XgTreeContext ctx) {
+        Map<Integer, XGSplitNode> splitNodes = new HashMap<>();
+        Map<Integer, XGLeafNode> leafNodes = new HashMap<>();
+
+        for (XGBoostModelParser.XgNodeContext nodeCtx : ctx.xgNode()) {
+            int idx = Integer.valueOf(nodeCtx.INT(0).getText());
+            String featureName = nodeCtx.STRING().getText();
+            double threshold = parseXgValue(nodeCtx.xgValue());
+
+            splitNodes.put(idx, new XGSplitNode(featureName, threshold));
+        }
+
+        for (XGBoostModelParser.XgLeafContext leafCtx : ctx.xgLeaf()) {
+            int idx = Integer.valueOf(leafCtx.INT().getText());
+            double val = parseXgValue(leafCtx.xgValue());
+
+            leafNodes.put(idx, new XGLeafNode(val));
+        }
+
+        for (XGBoostModelParser.XgNodeContext nodeCtx : ctx.xgNode()) {
+            int idx = Integer.valueOf(nodeCtx.INT(0).getText());
+            int yesIdx = Integer.valueOf(nodeCtx.INT(1).getText());
+            int noIdx = Integer.valueOf(nodeCtx.INT(2).getText());
+            int missIdx = Integer.valueOf(nodeCtx.INT(3).getText());
+
+            XGSplitNode node = splitNodes.get(idx);
+            node.setYesNode(splitNodes.containsKey(yesIdx) ? splitNodes.get(yesIdx) : leafNodes.get(yesIdx));
+            node.setNoNode(splitNodes.containsKey(noIdx) ? splitNodes.get(noIdx) : leafNodes.get(noIdx));
+            node.setMissingNode(splitNodes.containsKey(missIdx) ? splitNodes.get(missIdx) : leafNodes.get(missIdx));
+        }
+
+        return splitNodes.containsKey(ROOT_NODE_IDX) ? splitNodes.get(ROOT_NODE_IDX) : leafNodes.get(ROOT_NODE_IDX);
+    }
+
+    /**
+     * Parses value (int of double).
+     *
+     * @param valCtx Value context.
+     * @return Value.
+     */
+    private double parseXgValue(XGBoostModelParser.XgValueContext valCtx) {
+        TerminalNode terminalNode = valCtx.INT() != null ? valCtx.INT() : valCtx.DOUBLE();
+
+        return Double.valueOf(terminalNode.getText());
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/package-info.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/package-info.java
new file mode 100644
index 0000000..2cb9ce7
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/visitor/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Base package for XGBoost model parser ANTLR visitor.
+ */
+package org.apache.ignite.ml.xgboost.parser.visitor;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/IgniteMLXGBoostTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/IgniteMLXGBoostTestSuite.java b/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/IgniteMLXGBoostTestSuite.java
new file mode 100644
index 0000000..9ccab38
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/IgniteMLXGBoostTestSuite.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+import org.apache.ignite.ml.xgboost.parser.XGBoostModelParserTest;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+
+/** Test suite for all module tests. */
+@RunWith(Suite.class)
+@Suite.SuiteClasses({
+    XGBoostModelParserTest.class
+})
+public class IgniteMLXGBoostTestSuite {
+    // No-op.
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParserTest.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParserTest.java b/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParserTest.java
new file mode 100644
index 0000000..abee78f
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/test/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelParserTest.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import java.net.URL;
+import java.util.Scanner;
+import org.apache.ignite.ml.inference.InfModel;
+import org.apache.ignite.ml.inference.builder.SingleInfModelBuilder;
+import org.apache.ignite.ml.inference.builder.SyncInfModelBuilder;
+import org.apache.ignite.ml.inference.reader.FileSystemInfModelReader;
+import org.apache.ignite.ml.inference.reader.InfModelReader;
+import org.apache.ignite.ml.xgboost.MapBasedXGObject;
+import org.apache.ignite.ml.xgboost.XGObject;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests for {@link XGBoostModelParser}.
+ */
+public class XGBoostModelParserTest {
+    /** Test model resource name. */
+    private static final String TEST_MODEL_RESOURCE = "datasets/agaricus-model.txt";
+
+    /** Parser. */
+    private final XGModelParser parser = new XGModelParser();
+
+    /** Model builder. */
+    private final SyncInfModelBuilder mdlBuilder = new SingleInfModelBuilder();
+
+    /** End-to-end test for {@code parse()} and {@code predict()} methods. */
+    @Test
+    public void testParseAndPredict() {
+        URL url = XGBoostModelParserTest.class.getClassLoader().getResource(TEST_MODEL_RESOURCE);
+        if (url == null)
+            throw new IllegalStateException("File not found [resource_name=" + TEST_MODEL_RESOURCE + "]");
+
+        InfModelReader reader = new FileSystemInfModelReader(url.getPath());
+
+        try (InfModel<XGObject, Double> mdl = mdlBuilder.build(reader, parser);
+             Scanner testDataScanner = new Scanner(XGBoostModelParserTest.class.getClassLoader()
+                 .getResourceAsStream("datasets/agaricus-test-data.txt"));
+             Scanner testExpResultsScanner = new Scanner(XGBoostModelParserTest.class.getClassLoader()
+                 .getResourceAsStream("datasets/agaricus-test-expected-results.txt"))) {
+
+            while (testDataScanner.hasNextLine()) {
+                assertTrue(testExpResultsScanner.hasNextLine());
+
+                String testDataStr = testDataScanner.nextLine();
+                String testExpResultsStr = testExpResultsScanner.nextLine();
+
+                MapBasedXGObject testObj = new MapBasedXGObject();
+
+                for (String keyValueString : testDataStr.split(" ")) {
+                    String[] keyVal = keyValueString.split(":");
+
+                    if (keyVal.length == 2)
+                        testObj.put("f" + keyVal[0], Double.parseDouble(keyVal[1]));
+                }
+
+                double prediction = mdl.predict(testObj);
+
+                double expPrediction = Double.parseDouble(testExpResultsStr);
+
+                assertEquals(expPrediction, prediction, 1e-6);
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-model.txt
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-model.txt b/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-model.txt
new file mode 100644
index 0000000..4bf76d6
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-model.txt
@@ -0,0 +1,714 @@
+booster[0]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f56<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f60<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f23<-9.53674e-07] yes=13,no=14,missing=13
+				13:[f24<-9.53674e-07] yes=19,no=20,missing=19
+					19:leaf=1.99735
+					20:leaf=-1.8
+				14:leaf=-1.80952
+			8:leaf=-1.95062
+		4:[f21<-9.53674e-07] yes=9,no=10,missing=9
+			9:leaf=1.77778
+			10:leaf=-1.98104
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f67<-9.53674e-07] yes=11,no=12,missing=11
+			11:[f8<-9.53674e-07] yes=15,no=16,missing=15
+				15:leaf=-1.99117
+				16:leaf=1
+			12:[f39<-9.53674e-07] yes=17,no=18,missing=17
+				17:leaf=1.77143
+				18:leaf=-1.5
+		6:leaf=1.85965
+booster[1]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=1.13207
+		4:[f27<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f30<-9.53674e-07] yes=11,no=12,missing=11
+				11:leaf=-1.12641
+				12:leaf=1.08392
+			8:leaf=1.09118
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f67<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f39<-9.53674e-07] yes=13,no=14,missing=13
+				13:[f21<-9.53674e-07] yes=17,no=18,missing=17
+					17:leaf=-1.06692
+					18:leaf=2.08
+				14:leaf=-1.13236
+			10:[f39<-9.53674e-07] yes=15,no=16,missing=15
+				15:leaf=0.928896
+				16:leaf=-0.784694
+		6:leaf=0.994744
+booster[2]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=1.03409
+		4:[f27<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f30<-9.53674e-07] yes=11,no=12,missing=11
+				11:leaf=-1.00925
+				12:leaf=0.934041
+			8:leaf=0.947964
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f39<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f112<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=-0.862367
+				14:[f79<-9.53674e-07] yes=15,no=16,missing=15
+					15:leaf=0.996309
+					16:leaf=-0.217869
+			10:leaf=-1.03467
+		6:leaf=0.773973
+booster[3]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f56<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f60<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f36<-9.53674e-07] yes=11,no=12,missing=11
+				11:[f21<-9.53674e-07] yes=15,no=16,missing=15
+					15:leaf=0.535599
+					16:leaf=-0.591832
+				12:leaf=0.99398
+			8:leaf=-0.731796
+		4:leaf=-0.74401
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f67<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f115<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=-0.991027
+				14:[f86<-9.53674e-07] yes=17,no=18,missing=17
+					17:leaf=-0.71378
+					18:leaf=-0.010833
+			10:leaf=0.382551
+		6:leaf=0.587063
+booster[4]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.949695
+		4:[f27<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f30<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=-0.846263
+				14:leaf=0.571051
+			8:leaf=0.604424
+	2:[f39<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f7<-9.53674e-07] yes=9,no=10,missing=9
+			9:leaf=0.359876
+			10:leaf=-0.0906721
+		6:[f1<-9.53674e-07] yes=11,no=12,missing=11
+			11:leaf=-0.902494
+			12:leaf=-0.222349
+booster[5]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.866121
+		4:[f56<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f10<-9.53674e-07] yes=11,no=12,missing=11
+				11:leaf=-0.172918
+				12:leaf=0.444059
+			8:leaf=-0.581706
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f39<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f65<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=0.314289
+				14:leaf=-0.137217
+			10:leaf=-0.87866
+		6:leaf=0.593857
+booster[6]:
+0:[f64<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f39<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f21<-9.53674e-07] yes=5,no=6,missing=5
+			5:leaf=-0.16553
+			6:leaf=0.424994
+		4:[f118<-9.53674e-07] yes=7,no=8,missing=7
+			7:leaf=-0.662592
+			8:leaf=0.10184
+	2:leaf=0.647963
+booster[7]:
+0:[f27<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f39<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f112<-9.53674e-07] yes=5,no=6,missing=5
+			5:leaf=-0.205397
+			6:[f55<-9.53674e-07] yes=9,no=10,missing=9
+				9:leaf=0.531323
+				10:leaf=0.0411505
+		4:[f95<-9.53674e-07] yes=7,no=8,missing=7
+			7:leaf=0.0893909
+			8:leaf=-0.688257
+	2:leaf=0.62192
+booster[8]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.559472
+		4:leaf=0.047577
+	2:[f21<-9.53674e-07] yes=5,no=6,missing=5
+		5:leaf=-0.522063
+		6:leaf=0.185313
+booster[9]:
+0:[f106<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f36<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.106198
+		4:[f29<-9.53674e-07] yes=5,no=6,missing=5
+			5:leaf=0.451254
+			6:leaf=0.0100806
+	2:leaf=-0.265738
+booster[10]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f118<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.411374
+		4:leaf=-0.00392402
+	2:[f118<-9.53674e-07] yes=5,no=6,missing=5
+		5:leaf=-0.370329
+		6:leaf=0.106229
+booster[11]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.244834
+		4:leaf=0.393425
+	2:leaf=-0.191846
+booster[12]:
+0:[f65<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.281915
+	2:[f126<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.0457934
+		4:leaf=-0.335547
+booster[13]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f55<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.298848
+		4:leaf=-0.0234579
+	2:leaf=-0.211675
+booster[14]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.180838
+	2:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.28038
+		4:leaf=0.0867539
+booster[15]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.123414
+	2:leaf=-0.136942
+booster[16]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.154724
+	2:[f118<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.17891
+		4:leaf=0.28564
+booster[17]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.1202
+	2:leaf=-0.113537
+booster[18]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0946849
+	2:leaf=0.147314
+booster[19]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.128399
+	2:leaf=0.117783
+booster[20]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.135164
+	2:[f55<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.042949
+		4:leaf=0.173579
+booster[21]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0957448
+	2:leaf=-0.104156
+booster[22]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0925588
+	2:leaf=-0.0798059
+booster[23]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0830908
+	2:leaf=0.126943
+booster[24]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0823832
+	2:leaf=-0.0899369
+booster[25]:
+0:[f3<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0589036
+	2:leaf=-0.0851568
+booster[26]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0859156
+	2:leaf=-0.0815898
+booster[27]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0637587
+	2:leaf=-0.048542
+booster[28]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.069489
+	2:leaf=0.058072
+booster[29]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.149849
+	2:leaf=0.0984096
+booster[30]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0688469
+	2:leaf=0.0689056
+booster[31]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.071993
+	2:leaf=0.0544265
+booster[32]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0686437
+	2:leaf=-0.061108
+booster[33]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0522195
+	2:leaf=-0.0544709
+booster[34]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0445775
+	2:leaf=-0.0612543
+booster[35]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0370941
+	2:leaf=0.0414116
+booster[36]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0491957
+	2:leaf=-0.0374184
+booster[37]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0428276
+	2:leaf=0.0362258
+booster[38]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.038428
+	2:leaf=-0.0331781
+booster[39]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.14093
+	2:leaf=0.101744
+booster[40]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0443167
+	2:leaf=-0.0668384
+booster[41]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0654174
+	2:leaf=0.0401212
+booster[42]:
+0:[f118<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0426251
+	2:leaf=-0.0430745
+booster[43]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0315924
+	2:leaf=0.0413181
+booster[44]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.037716
+	2:leaf=0.0316046
+booster[45]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0384603
+	2:leaf=-0.031591
+booster[46]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0264121
+	2:leaf=0.0318885
+booster[47]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0258388
+	2:leaf=-0.0263959
+booster[48]:
+0:[f118<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0220629
+	2:leaf=-0.0169775
+booster[49]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0254499
+	2:leaf=0.0207041
+booster[50]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.022765
+	2:leaf=-0.0334065
+booster[51]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.022757
+	2:leaf=-0.0227902
+booster[52]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0265489
+	2:leaf=-0.0199871
+booster[53]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0149867
+	2:leaf=0.022471
+booster[54]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0175078
+	2:leaf=0.0157137
+booster[55]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0182503
+	2:leaf=-0.0143524
+booster[56]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0115217
+	2:leaf=0.0166359
+booster[57]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0134613
+	2:leaf=-0.0116378
+booster[58]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00981541
+	2:leaf=0.0115454
+booster[59]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0116732
+	2:leaf=0.00925633
+booster[60]:
+0:[f4<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00879889
+	2:leaf=-0.0122642
+booster[61]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0105853
+	2:leaf=-0.00918858
+booster[62]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00988643
+	2:leaf=0.0133116
+booster[63]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00922858
+	2:leaf=-0.00796718
+booster[64]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00674803
+	2:leaf=0.00923198
+booster[65]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00946677
+	2:leaf=-0.00611888
+booster[66]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00809434
+	2:leaf=-0.00524561
+booster[67]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0058383
+	2:leaf=-0.0047337
+booster[68]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00516364
+	2:leaf=0.00612514
+booster[69]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00393965
+	2:leaf=0.0055112
+booster[70]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0062736
+	2:leaf=-0.00406246
+booster[71]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00387397
+	2:leaf=-0.00335857
+booster[72]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00378672
+	2:leaf=-0.00363264
+booster[73]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00348857
+	2:leaf=0.00454308
+booster[74]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00310136
+	2:leaf=-0.00269635
+booster[75]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00232427
+	2:leaf=0.00316355
+booster[76]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0033131
+	2:leaf=-0.00214357
+booster[77]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00198535
+	2:leaf=0.00270199
+booster[78]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00189522
+	2:leaf=-0.00163941
+booster[79]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0018533
+	2:leaf=0.00251417
+booster[80]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00213544
+	2:leaf=-0.00134465
+booster[81]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0010731
+	2:leaf=0.0017787
+booster[82]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00170681
+	2:leaf=-0.00144721
+booster[83]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000965197
+	2:leaf=0.00137187
+booster[84]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0014236
+	2:leaf=-0.000908222
+booster[85]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000799637
+	2:leaf=0.00110198
+booster[86]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000950752
+	2:leaf=-0.000839873
+booster[87]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000841428
+	2:leaf=0.0011364
+booster[88]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000900093
+	2:leaf=-0.00055321
+booster[89]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000479465
+	2:leaf=0.000775463
+booster[90]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000824745
+	2:leaf=-0.000703525
+booster[91]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000446206
+	2:leaf=0.000627391
+booster[92]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000531432
+	2:leaf=-0.000464763
+booster[93]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000457717
+	2:leaf=-0.000483533
+booster[94]:
+0:leaf=-8.69481e-06
+booster[95]:
+0:leaf=-2.22842e-06
+booster[96]:
+0:leaf=-7.41984e-07
+booster[97]:
+0:leaf=6.03395e-07
+booster[98]:
+0:leaf=-2.45552e-08
+booster[99]:
+0:leaf=-2.45552e-08
+booster[100]:
+0:leaf=-2.45552e-08
+booster[101]:
+0:leaf=-2.45552e-08
+booster[102]:
+0:leaf=-2.45552e-08
+booster[103]:
+0:leaf=-2.45552e-08
+booster[104]:
+0:leaf=-2.45552e-08
+booster[105]:
+0:leaf=-2.45552e-08
+booster[106]:
+0:leaf=-2.45552e-08
+booster[107]:
+0:leaf=-2.45552e-08
+booster[108]:
+0:leaf=-2.45552e-08
+booster[109]:
+0:leaf=-2.45552e-08
+booster[110]:
+0:leaf=-2.45552e-08
+booster[111]:
+0:leaf=-2.45552e-08
+booster[112]:
+0:leaf=-2.45552e-08
+booster[113]:
+0:leaf=-2.45552e-08
+booster[114]:
+0:leaf=-2.45552e-08
+booster[115]:
+0:leaf=-2.45552e-08
+booster[116]:
+0:leaf=-2.45552e-08
+booster[117]:
+0:leaf=-2.45552e-08
+booster[118]:
+0:leaf=-2.45552e-08
+booster[119]:
+0:leaf=-2.45552e-08
+booster[120]:
+0:leaf=-2.45552e-08
+booster[121]:
+0:leaf=-2.45552e-08
+booster[122]:
+0:leaf=-2.45552e-08
+booster[123]:
+0:leaf=-2.45552e-08
+booster[124]:
+0:leaf=-2.45552e-08
+booster[125]:
+0:leaf=-2.45552e-08
+booster[126]:
+0:leaf=-2.45552e-08
+booster[127]:
+0:leaf=-2.45552e-08
+booster[128]:
+0:leaf=-2.45552e-08
+booster[129]:
+0:leaf=-2.45552e-08
+booster[130]:
+0:leaf=-2.45552e-08
+booster[131]:
+0:leaf=-2.45552e-08
+booster[132]:
+0:leaf=-2.45552e-08
+booster[133]:
+0:leaf=-2.45552e-08
+booster[134]:
+0:leaf=-2.45552e-08
+booster[135]:
+0:leaf=-2.45552e-08
+booster[136]:
+0:leaf=-2.45552e-08
+booster[137]:
+0:leaf=-2.45552e-08
+booster[138]:
+0:leaf=-2.45552e-08
+booster[139]:
+0:leaf=-2.45552e-08
+booster[140]:
+0:leaf=-2.45552e-08
+booster[141]:
+0:leaf=-2.45552e-08
+booster[142]:
+0:leaf=-2.45552e-08
+booster[143]:
+0:leaf=-2.45552e-08
+booster[144]:
+0:leaf=-2.45552e-08
+booster[145]:
+0:leaf=-2.45552e-08
+booster[146]:
+0:leaf=-2.45552e-08
+booster[147]:
+0:leaf=-2.45552e-08
+booster[148]:
+0:leaf=-2.45552e-08
+booster[149]:
+0:leaf=-2.45552e-08
+booster[150]:
+0:leaf=-2.45552e-08
+booster[151]:
+0:leaf=-2.45552e-08
+booster[152]:
+0:leaf=-2.45552e-08
+booster[153]:
+0:leaf=-2.45552e-08
+booster[154]:
+0:leaf=-2.45552e-08
+booster[155]:
+0:leaf=-2.45552e-08
+booster[156]:
+0:leaf=-2.45552e-08
+booster[157]:
+0:leaf=-2.45552e-08
+booster[158]:
+0:leaf=-2.45552e-08
+booster[159]:
+0:leaf=-2.45552e-08
+booster[160]:
+0:leaf=-2.45552e-08
+booster[161]:
+0:leaf=-2.45552e-08
+booster[162]:
+0:leaf=-2.45552e-08
+booster[163]:
+0:leaf=-2.45552e-08
+booster[164]:
+0:leaf=-2.45552e-08
+booster[165]:
+0:leaf=-2.45552e-08
+booster[166]:
+0:leaf=-2.45552e-08
+booster[167]:
+0:leaf=-2.45552e-08
+booster[168]:
+0:leaf=-2.45552e-08
+booster[169]:
+0:leaf=-2.45552e-08
+booster[170]:
+0:leaf=-2.45552e-08
+booster[171]:
+0:leaf=-2.45552e-08
+booster[172]:
+0:leaf=-2.45552e-08
+booster[173]:
+0:leaf=-2.45552e-08
+booster[174]:
+0:leaf=-2.45552e-08
+booster[175]:
+0:leaf=-2.45552e-08
+booster[176]:
+0:leaf=-2.45552e-08
+booster[177]:
+0:leaf=-2.45552e-08
+booster[178]:
+0:leaf=-2.45552e-08
+booster[179]:
+0:leaf=-2.45552e-08
+booster[180]:
+0:leaf=-2.45552e-08
+booster[181]:
+0:leaf=-2.45552e-08
+booster[182]:
+0:leaf=-2.45552e-08
+booster[183]:
+0:leaf=-2.45552e-08
+booster[184]:
+0:leaf=-2.45552e-08
+booster[185]:
+0:leaf=-2.45552e-08
+booster[186]:
+0:leaf=-2.45552e-08
+booster[187]:
+0:leaf=-2.45552e-08
+booster[188]:
+0:leaf=-2.45552e-08
+booster[189]:
+0:leaf=-2.45552e-08
+booster[190]:
+0:leaf=-2.45552e-08
+booster[191]:
+0:leaf=-2.45552e-08
+booster[192]:
+0:leaf=-2.45552e-08
+booster[193]:
+0:leaf=-2.45552e-08
+booster[194]:
+0:leaf=-2.45552e-08
+booster[195]:
+0:leaf=-2.45552e-08
+booster[196]:
+0:leaf=-2.45552e-08
+booster[197]:
+0:leaf=-2.45552e-08
+booster[198]:
+0:leaf=-2.45552e-08
+booster[199]:
+0:leaf=-2.45552e-08
\ No newline at end of file


[15/52] [abbrv] ignite git commit: IGNITE-10643: SQL: Unified affinity key column resolution for queries. This closes #5641. This closes #5649.

Posted by sb...@apache.org.
IGNITE-10643: SQL: Unified affinity key column resolution for queries. This closes #5641. This closes #5649.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/c1edb300
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/c1edb300
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/c1edb300

Branch: refs/heads/ignite-627
Commit: c1edb300979b6a4127a9a676e8d504f0dac459a6
Parents: 84a8e81
Author: devozerov <vo...@gridgain.com>
Authored: Tue Dec 18 11:07:30 2018 +0300
Committer: devozerov <vo...@gridgain.com>
Committed: Tue Dec 18 11:07:30 2018 +0300

----------------------------------------------------------------------
 .../processors/cache/CacheObjectContext.java    |  35 +-
 .../cache/GridCacheAffinityManager.java         |   6 +-
 .../processors/cache/GridCacheContext.java      |  22 +-
 .../processors/cache/GridCacheContextInfo.java  |  88 ++---
 .../processors/cache/GridCacheProcessor.java    |   4 +-
 .../cache/binary/CacheObjectBinaryContext.java  |  62 ----
 .../binary/CacheObjectBinaryProcessor.java      | 149 --------
 .../binary/CacheObjectBinaryProcessorImpl.java  | 306 +++++++++++++---
 .../cache/binary/IgniteBinaryImpl.java          |   4 +-
 .../reader/StandaloneWalRecordsIterator.java    |   2 +-
 .../cacheobject/IgniteCacheObjectProcessor.java | 119 ++++++-
 .../IgniteCacheObjectProcessorImpl.java         | 346 -------------------
 .../cacheobject/UserKeyCacheObjectImpl.java     |   2 +-
 .../processors/query/GridQueryProcessor.java    |  15 +-
 .../query/GridQueryTypeDescriptor.java          |   5 +
 .../query/QueryTypeDescriptorImpl.java          |  25 +-
 .../internal/processors/query/QueryUtils.java   |  35 +-
 .../binary/BinaryMarshallerSelfTest.java        |   2 +-
 ...IgniteClientCacheInitializationFailTest.java |   2 +-
 .../wal/IgniteWalIteratorSwitchSegmentTest.java |   4 +-
 .../query/h2/DmlStatementsProcessor.java        |   2 +-
 .../processors/query/h2/H2RowCacheRegistry.java |   2 +-
 .../processors/query/h2/H2TableDescriptor.java  |   6 +-
 .../internal/processors/query/h2/H2Utils.java   |   4 +-
 .../processors/query/h2/IgniteH2Indexing.java   |   4 +-
 .../query/h2/affinity/PartitionExtractor.java   |  36 +-
 .../query/h2/dml/UpdatePlanBuilder.java         |   2 +-
 .../query/h2/opt/GridH2CollocationModel.java    |  10 +-
 .../query/h2/opt/GridH2IndexBase.java           |   6 +-
 .../query/h2/opt/GridH2RowDescriptor.java       |  11 +-
 .../processors/query/h2/opt/GridH2Table.java    |  74 ++--
 ...ityKeyNameAndValueFieldNameConflictTest.java |   6 +
 ...acheDistributedJoinCollocatedAndNotTest.java |   2 +
 .../AndOperationExtractPartitionSelfTest.java   |   2 +-
 ...sappearedCacheCauseRetryMessageSelfTest.java |   6 +-
 ...appearedCacheWasNotFoundMessageSelfTest.java |   4 +-
 .../InOperationExtractPartitionSelfTest.java    |   5 +-
 .../query/h2/twostep/JoinSqlTestHelper.java     |  72 ++--
 .../NonCollocatedRetryMessageSelfTest.java      |   4 +-
 .../h2/twostep/RetryCauseMessageSelfTest.java   |   4 +-
 40 files changed, 648 insertions(+), 847 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
index a34b63b..d121a5e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheObjectContext.java
@@ -25,22 +25,29 @@ import org.apache.ignite.internal.GridKernalContext;
  */
 public class CacheObjectContext implements CacheObjectValueContext {
     /** */
-    private GridKernalContext kernalCtx;
+    private final GridKernalContext kernalCtx;
 
     /** */
-    private String cacheName;
+    private final String cacheName;
 
     /** */
+    @SuppressWarnings("deprecation")
     private AffinityKeyMapper dfltAffMapper;
 
+    /** Whether custom affinity mapper is used. */
+    private final boolean customAffMapper;
+
     /** */
-    private boolean cpyOnGet;
+    private final boolean cpyOnGet;
 
     /** */
-    private boolean storeVal;
+    private final boolean storeVal;
 
     /** */
-    private boolean addDepInfo;
+    private final boolean addDepInfo;
+
+    /** Boinary enabled flag. */
+    private final boolean binaryEnabled;
 
     /**
      * @param kernalCtx Kernal context.
@@ -48,19 +55,25 @@ public class CacheObjectContext implements CacheObjectValueContext {
      * @param cpyOnGet Copy on get flag.
      * @param storeVal {@code True} if should store unmarshalled value in cache.
      * @param addDepInfo {@code true} if deployment info should be associated with the objects of this cache.
+     * @param binaryEnabled Binary enabled flag.
      */
+    @SuppressWarnings("deprecation")
     public CacheObjectContext(GridKernalContext kernalCtx,
         String cacheName,
         AffinityKeyMapper dfltAffMapper,
+        boolean customAffMapper,
         boolean cpyOnGet,
         boolean storeVal,
-        boolean addDepInfo) {
+        boolean addDepInfo,
+        boolean binaryEnabled) {
         this.kernalCtx = kernalCtx;
         this.cacheName = cacheName;
         this.dfltAffMapper = dfltAffMapper;
+        this.customAffMapper = customAffMapper;
         this.cpyOnGet = cpyOnGet;
         this.storeVal = storeVal;
         this.addDepInfo = addDepInfo;
+        this.binaryEnabled = binaryEnabled;
     }
 
     /**
@@ -88,10 +101,18 @@ public class CacheObjectContext implements CacheObjectValueContext {
     /**
      * @return Default affinity mapper.
      */
+    @SuppressWarnings("deprecation")
     public AffinityKeyMapper defaultAffMapper() {
         return dfltAffMapper;
     }
 
+    /**
+     * @return Whether custom affinity mapper is used.
+     */
+    public boolean customAffinityMapper() {
+        return customAffMapper;
+    }
+
     /** {@inheritDoc} */
     @Override public GridKernalContext kernalContext() {
         return kernalCtx;
@@ -99,7 +120,7 @@ public class CacheObjectContext implements CacheObjectValueContext {
 
     /** {@inheritDoc} */
     @Override public boolean binaryEnabled() {
-        return false;
+        return binaryEnabled;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
index e20855f..1315c67 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheAffinityManager.java
@@ -193,10 +193,12 @@ public class GridCacheAffinityManager extends GridCacheManagerAdapter {
      * @return Affinity key.
      */
     public Object affinityKey(Object key) {
+        CacheObjectContext coCtx = cctx.cacheObjectContext();
+
         if (key instanceof CacheObject && !(key instanceof BinaryObject))
-            key = ((CacheObject)key).value(cctx.cacheObjectContext(), false);
+            key = ((CacheObject)key).value(coCtx, false);
 
-        return (key instanceof GridCacheInternal ? cctx.defaultAffMapper() : affMapper).affinityKey(key);
+        return (key instanceof GridCacheInternal ? coCtx.defaultAffMapper() : affMapper).affinityKey(key);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
index ffb1886..426a29c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContext.java
@@ -47,7 +47,6 @@ import org.apache.ignite.binary.BinaryField;
 import org.apache.ignite.binary.BinaryObjectBuilder;
 import org.apache.ignite.cache.CacheInterceptor;
 import org.apache.ignite.cache.CacheMode;
-import org.apache.ignite.cache.affinity.AffinityKeyMapper;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
@@ -256,9 +255,6 @@ public class GridCacheContext<K, V> implements Externalizable {
     /** */
     private boolean deferredDel;
 
-    /** */
-    private boolean customAffMapper;
-
     /** Whether {@link EventType#EVT_CACHE_REBALANCE_STARTED} was sent (used only for REPLICATED cache). */
     private volatile boolean rebalanceStartedEvtSent;
 
@@ -465,13 +461,6 @@ public class GridCacheContext<K, V> implements Externalizable {
     }
 
     /**
-     * @return {@code True} if custom {@link AffinityKeyMapper} is configured for cache.
-     */
-    public boolean customAffinityMapper() {
-        return customAffMapper;
-    }
-
-    /**
      * @return Dynamic deployment ID.
      */
     public IgniteUuid dynamicDeploymentId() {
@@ -1228,13 +1217,6 @@ public class GridCacheContext<K, V> implements Externalizable {
     }
 
     /**
-     * @return Default affinity key mapper.
-     */
-    public AffinityKeyMapper defaultAffMapper() {
-        return cacheObjCtx.defaultAffMapper();
-    }
-
-    /**
      * @return Compression manager.
      */
     public CacheCompressionManager compress() {
@@ -1248,8 +1230,6 @@ public class GridCacheContext<K, V> implements Externalizable {
      */
     public void cacheObjectContext(CacheObjectContext cacheObjCtx) {
         this.cacheObjCtx = cacheObjCtx;
-
-        customAffMapper = cacheCfg.getAffinityMapper().getClass() != cacheObjCtx.defaultAffMapper().getClass();
     }
 
     /**
@@ -2302,7 +2282,7 @@ public class GridCacheContext<K, V> implements Externalizable {
 
         BinaryObjectBuilderImpl builder0 = (BinaryObjectBuilderImpl)buider;
 
-        if (!customAffinityMapper()) {
+        if (!cacheObjCtx.customAffinityMapper()) {
             CacheDefaultBinaryAffinityKeyMapper mapper =
                 (CacheDefaultBinaryAffinityKeyMapper)cacheObjCtx.defaultAffMapper();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContextInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContextInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContextInfo.java
index 673c32e..958f4f8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContextInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheContextInfo.java
@@ -18,7 +18,6 @@
 package org.apache.ignite.internal.processors.cache;
 
 import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.GridKernalContext;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.CU;
 import org.apache.ignite.lang.IgniteUuid;
@@ -29,15 +28,9 @@ import org.jetbrains.annotations.Nullable;
  */
 @GridToStringExclude
 public class GridCacheContextInfo<K, V> {
-    /** Full cache context. Can be {@code null} in case a cache is not started. */
-    @Nullable private volatile GridCacheContext gridCacheContext;
-
     /** Cache is client or not. */
     private final boolean clientCache;
 
-    /** Kernal context. */
-    private final GridKernalContext ctx;
-
     /** Dynamic cache deployment ID. */
     private final IgniteUuid dynamicDeploymentId;
 
@@ -50,96 +43,90 @@ public class GridCacheContextInfo<K, V> {
     /** Cache ID. */
     private final int cacheId;
 
+    /** Full cache context. Can be {@code null} in case a cache is not started. */
+    @Nullable private volatile GridCacheContext cctx;
+
     /**
      * Constructor of full cache context.
      *
-     * @param gridCacheContext Cache context.
+     * @param cctx Cache context.
      * @param clientCache Client cache or not.
      */
-    public GridCacheContextInfo(GridCacheContext<K, V> gridCacheContext, boolean clientCache) {
-        this.gridCacheContext = gridCacheContext;
-        this.ctx = gridCacheContext.kernalContext();
-        this.config = gridCacheContext.config();
-        this.dynamicDeploymentId = null;
-        this.groupId = gridCacheContext.groupId();
-        this.cacheId = gridCacheContext.cacheId();
+    public GridCacheContextInfo(GridCacheContext<K, V> cctx, boolean clientCache) {
+        config = cctx.config();
+        dynamicDeploymentId = null;
+        groupId = cctx.groupId();
+        cacheId = cctx.cacheId();
+
         this.clientCache = clientCache;
+
+        this.cctx = cctx;
     }
 
     /**
      * Constructor of not started cache context.
      *
      * @param cacheDesc Cache descriptor.
-     * @param ctx Kernal context.
      */
-    public GridCacheContextInfo(DynamicCacheDescriptor cacheDesc, GridKernalContext ctx) {
-        this.config = cacheDesc.cacheConfiguration();
-        this.dynamicDeploymentId = cacheDesc.deploymentId();
-        this.groupId = cacheDesc.groupId();
-        this.ctx = ctx;
-        this.clientCache = true;
-
-        this.cacheId = CU.cacheId(config.getName());
+    public GridCacheContextInfo(DynamicCacheDescriptor cacheDesc) {
+        config = cacheDesc.cacheConfiguration();
+        dynamicDeploymentId = cacheDesc.deploymentId();
+        groupId = cacheDesc.groupId();
+        cacheId = CU.cacheId(config.getName());
 
+        clientCache = true;
     }
 
     /**
      * @return Cache configuration.
      */
     public CacheConfiguration config() {
-        return isCacheContextInited() ? gridCacheContext.config() : config;
+        return config;
     }
 
     /**
      * @return Cache name.
      */
     public String name() {
-        return isCacheContextInited() ? gridCacheContext.name() : config.getName();
-    }
-
-    /**
-     * @return {@code true} in case cache use custom affinity mapper.
-     */
-    public boolean customAffinityMapper() {
-        return isCacheContextInited() && gridCacheContext.customAffinityMapper();
+        return config.getName();
     }
 
     /**
      * @return Cache group id.
      */
     public int groupId() {
-        return isCacheContextInited() ? gridCacheContext.groupId() : groupId;
+        return groupId;
     }
 
     /**
      * @return Cache id.
      */
     public int cacheId() {
-        return isCacheContextInited() ? gridCacheContext.cacheId() : cacheId;
+        return cacheId;
     }
 
     /**
      * @return {@code true} in case affinity node.
      */
     public boolean affinityNode() {
-        return isCacheContextInited() && gridCacheContext.affinityNode();
+        return cctx != null && cctx.affinityNode();
     }
 
     /**
      * @return Cache context. {@code null} for not started cache.
      */
-    @Nullable public GridCacheContext gridCacheContext() {
-        return gridCacheContext;
+    @Nullable public GridCacheContext cacheContext() {
+        return cctx;
     }
 
     /**
      * @return Dynamic deployment ID.
      */
     public IgniteUuid dynamicDeploymentId() {
-        GridCacheContext ctx = gridCacheContext;
+        GridCacheContext cctx0 = cctx;
 
-        if (ctx != null)
-            return ctx.dynamicDeploymentId();
+        if (cctx0 != null)
+            return cctx0.dynamicDeploymentId();
 
         assert dynamicDeploymentId != null : "Deployment id is not set and cache context is not initialized: " + this;
 
@@ -149,13 +136,13 @@ public class GridCacheContextInfo<K, V> {
     /**
      * Set real cache context in case cache has been fully initted and start.
      *
-     * @param gridCacheCtx Initted cache context.
+     * @param cctx Initted cache context.
      */
-    public void initCacheContext(GridCacheContext<?, ?> gridCacheCtx) {
-        assert this.gridCacheContext == null : this.gridCacheContext;
-        assert gridCacheCtx != null;
+    public void initCacheContext(GridCacheContext<?, ?> cctx) {
+        assert this.cctx == null : this.cctx;
+        assert cctx != null;
 
-        this.gridCacheContext = gridCacheCtx;
+        this.cctx = cctx;
     }
 
     /**
@@ -166,17 +153,10 @@ public class GridCacheContextInfo<K, V> {
     }
 
     /**
-     * @return Kernal context.
-     */
-    public GridKernalContext context() {
-        return ctx;
-    }
-
-    /**
      * @return {@code true} If Cache context is initted.
      */
     public boolean isCacheContextInited() {
-        return gridCacheContext != null;
+        return cctx != null;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index 885ee22..5bd9eb8 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -1298,7 +1298,9 @@ public class GridCacheProcessor extends GridProcessorAdapter {
     public void initQueryStructuresForNotStartedCache(DynamicCacheDescriptor cacheDesc) throws IgniteCheckedException {
         QuerySchema schema = cacheDesc.schema() != null ? cacheDesc.schema() : new QuerySchema();
 
-        GridCacheContextInfo cacheInfo = new GridCacheContextInfo(cacheDesc, ctx);
+        CacheObjectContext coCtx = cacheDesc.cacheObjectContext(ctx.cacheObjects());
+
+        GridCacheContextInfo cacheInfo = new GridCacheContextInfo(cacheDesc);
 
         ctx.query().onCacheStart(cacheInfo, schema, cacheDesc.sql());
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryContext.java
deleted file mode 100644
index 7f7e26e..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryContext.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.binary;
-
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.processors.cache.CacheDefaultBinaryAffinityKeyMapper;
-import org.apache.ignite.internal.processors.cache.CacheObjectContext;
-import org.apache.ignite.internal.processors.cache.GridCacheDefaultAffinityKeyMapper;
-
-/**
- *
- */
-public class CacheObjectBinaryContext extends CacheObjectContext {
-    /** */
-    private boolean binaryEnabled;
-
-    /**
-     * @param kernalCtx Kernal context.
-     * @param ccfg Cache configuration.
-     * @param binaryEnabled Binary enabled flag.
-     * @param cpyOnGet Copy on get flag.
-     * @param storeVal {@code True} if should store unmarshalled value in cache.
-     * @param depEnabled {@code true} if deployment is enabled for the given cache.
-     */
-    public CacheObjectBinaryContext(GridKernalContext kernalCtx,
-        CacheConfiguration ccfg,
-        boolean cpyOnGet,
-        boolean storeVal,
-        boolean binaryEnabled,
-        boolean depEnabled) {
-        super(kernalCtx,
-            ccfg.getName(),
-            binaryEnabled ? new CacheDefaultBinaryAffinityKeyMapper(ccfg.getKeyConfiguration()) :
-                new GridCacheDefaultAffinityKeyMapper(),
-            cpyOnGet,
-            storeVal,
-            depEnabled);
-
-        this.binaryEnabled = binaryEnabled;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean binaryEnabled() {
-        return binaryEnabled;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessor.java
deleted file mode 100644
index 781bc5e..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessor.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cache.binary;
-
-import java.util.Collection;
-import java.util.Map;
-import org.apache.ignite.IgniteBinary;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.binary.BinaryObject;
-import org.apache.ignite.binary.BinaryObjectBuilder;
-import org.apache.ignite.binary.BinaryType;
-import org.apache.ignite.internal.binary.BinaryFieldMetadata;
-import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Extended cache object processor interface with additional methods for binary.
- */
-public interface CacheObjectBinaryProcessor extends IgniteCacheObjectProcessor {
-    /**
-     * @param clsName Class name.
-     * @return Builder.
-     */
-    public BinaryObjectBuilder builder(String clsName);
-
-    /**
-     * Creates builder initialized by existing binary object.
-     *
-     * @param binaryObj Binary object to edit.
-     * @return Binary builder.
-     */
-    public BinaryObjectBuilder builder(BinaryObject binaryObj);
-
-    /**
-     * @param typeId Type ID.
-     * @param newMeta New meta data.
-     * @param failIfUnregistered Fail if unregistered.
-     * @throws IgniteException In case of error.
-     */
-    public void addMeta(int typeId, final BinaryType newMeta, boolean failIfUnregistered) throws IgniteException;
-
-    /**
-     * Adds metadata locally without triggering discovery exchange.
-     *
-     * Must be used only during startup and only if it is guaranteed that all nodes have the same copy
-     * of BinaryType.
-     *
-     * @param typeId Type ID.
-     * @param newMeta New meta data.
-     * @throws IgniteException In case of error.
-     */
-    public void addMetaLocally(int typeId, final BinaryType newMeta) throws IgniteException;
-
-    /**
-     * @param typeId Type ID.
-     * @param typeName Type name.
-     * @param affKeyFieldName Affinity key field name.
-     * @param fieldTypeIds Fields map.
-     * @param isEnum Enum flag.
-     * @param enumMap Enum name to ordinal mapping.
-     * @throws IgniteException In case of error.
-     */
-    public void updateMetadata(int typeId, String typeName, @Nullable String affKeyFieldName,
-        Map<String, BinaryFieldMetadata> fieldTypeIds, boolean isEnum, @Nullable Map<String, Integer> enumMap)
-        throws IgniteException;
-
-    /**
-     * @param typeId Type ID.
-     * @return Meta data.
-     * @throws IgniteException In case of error.
-     */
-    @Nullable public BinaryType metadata(int typeId) throws IgniteException;
-
-
-    /**
-     * @param typeId Type ID.
-     * @param schemaId Schema ID.
-     * @return Meta data.
-     * @throws IgniteException In case of error.
-     */
-    @Nullable public BinaryType metadata(int typeId, int schemaId) throws IgniteException;
-
-    /**
-     * @param typeIds Type ID.
-     * @return Meta data.
-     * @throws IgniteException In case of error.
-     */
-    public Map<Integer, BinaryType> metadata(Collection<Integer> typeIds) throws IgniteException;
-
-    /**
-     * @return Metadata for all types.
-     * @throws IgniteException In case of error.
-     */
-    public Collection<BinaryType> metadata() throws IgniteException;
-
-    /**
-     * @param typeName Type name.
-     * @param ord ordinal.
-     * @return Enum object.
-     * @throws IgniteException If failed.
-     */
-    public BinaryObject buildEnum(String typeName, int ord) throws IgniteException;
-
-    /**
-     * @param typeName Type name.
-     * @param name Name.
-     * @return Enum object.
-     * @throws IgniteException If failed.
-     */
-    public BinaryObject buildEnum(String typeName, String name) throws IgniteException;
-
-    /**
-     * Register enum type
-     *
-     * @param typeName Type name.
-     * @param vals Mapping of enum constant names to ordinals.
-     * @return Binary Type for registered enum.
-     */
-    public BinaryType registerEnum(String typeName, Map<String, Integer> vals) throws IgniteException;
-
-    /**
-     * @return Binaries interface.
-     * @throws IgniteException If failed.
-     */
-    @Override public IgniteBinary binary() throws IgniteException;
-
-    /**
-     * @param obj Original object.
-     * @param failIfUnregistered Throw exception if class isn't registered.
-     * @return Binary object (in case binary marshaller is used).
-     * @throws IgniteException If failed.
-     */
-    public Object marshalToBinary(Object obj, boolean failIfUnregistered) throws IgniteException;
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
index 8dcc510..0a1e887 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/CacheObjectBinaryProcessorImpl.java
@@ -19,10 +19,13 @@ package org.apache.ignite.internal.processors.cache.binary;
 
 import java.io.File;
 import java.io.Serializable;
+import java.math.BigDecimal;
+import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -43,6 +46,7 @@ import org.apache.ignite.binary.BinaryObjectBuilder;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryType;
 import org.apache.ignite.binary.BinaryTypeConfiguration;
+import org.apache.ignite.cache.affinity.AffinityKeyMapper;
 import org.apache.ignite.cluster.ClusterNode;
 import org.apache.ignite.configuration.BinaryConfiguration;
 import org.apache.ignite.configuration.CacheConfiguration;
@@ -67,14 +71,25 @@ import org.apache.ignite.internal.binary.GridBinaryMarshaller;
 import org.apache.ignite.internal.binary.builder.BinaryObjectBuilderImpl;
 import org.apache.ignite.internal.binary.streams.BinaryInputStream;
 import org.apache.ignite.internal.binary.streams.BinaryOffheapInputStream;
+import org.apache.ignite.internal.processors.GridProcessorAdapter;
+import org.apache.ignite.internal.processors.cache.CacheDefaultBinaryAffinityKeyMapper;
 import org.apache.ignite.internal.processors.cache.CacheObject;
+import org.apache.ignite.internal.processors.cache.CacheObjectByteArrayImpl;
 import org.apache.ignite.internal.processors.cache.CacheObjectContext;
+import org.apache.ignite.internal.processors.cache.CacheObjectImpl;
 import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
 import org.apache.ignite.internal.processors.cache.GridCacheContext;
+import org.apache.ignite.internal.processors.cache.GridCacheDefaultAffinityKeyMapper;
 import org.apache.ignite.internal.processors.cache.GridCacheUtils;
+import org.apache.ignite.internal.processors.cache.IncompleteCacheObject;
 import org.apache.ignite.internal.processors.cache.KeyCacheObject;
+import org.apache.ignite.internal.processors.cache.KeyCacheObjectImpl;
 import org.apache.ignite.internal.processors.cache.transactions.IgniteInternalTx;
-import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessorImpl;
+import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
+import org.apache.ignite.internal.processors.cacheobject.UserCacheObjectByteArrayImpl;
+import org.apache.ignite.internal.processors.cacheobject.UserCacheObjectImpl;
+import org.apache.ignite.internal.processors.cacheobject.UserKeyCacheObjectImpl;
+import org.apache.ignite.internal.processors.query.QueryUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.util.MutableSingletonList;
@@ -90,6 +105,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.lang.IgniteClosure;
 import org.apache.ignite.lang.IgniteFuture;
+import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.spi.IgniteNodeValidationResult;
 import org.apache.ignite.spi.discovery.DiscoveryDataBag;
@@ -108,8 +124,10 @@ import static org.apache.ignite.internal.GridComponent.DiscoveryDataExchangeType
 /**
  * Binary processor implementation.
  */
-public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorImpl implements
-    CacheObjectBinaryProcessor {
+public class CacheObjectBinaryProcessorImpl extends GridProcessorAdapter implements IgniteCacheObjectProcessor {
+    /** Immutable classes. */
+    private static final Collection<Class<?>> IMMUTABLE_CLS = new HashSet<>();
+
     /** */
     private volatile boolean discoveryStarted;
 
@@ -139,7 +157,8 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     private long waitSchemaTimeout = IgniteSystemProperties.getLong(IGNITE_WAIT_SCHEMA_UPDATE, 30_000);
 
     /** For tests. */
-    public static boolean useTestBinaryCtx = false;
+    @SuppressWarnings("PublicField")
+    public static boolean useTestBinaryCtx;
 
     /** */
     @GridToStringExclude
@@ -154,9 +173,28 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     /** Cached affinity key field names. */
     private final ConcurrentHashMap<Integer, T1<BinaryField>> affKeyFields = new ConcurrentHashMap<>();
 
+    /*
+     * Static initializer
+     */
+    static {
+        IMMUTABLE_CLS.add(String.class);
+        IMMUTABLE_CLS.add(Boolean.class);
+        IMMUTABLE_CLS.add(Byte.class);
+        IMMUTABLE_CLS.add(Short.class);
+        IMMUTABLE_CLS.add(Character.class);
+        IMMUTABLE_CLS.add(Integer.class);
+        IMMUTABLE_CLS.add(Long.class);
+        IMMUTABLE_CLS.add(Float.class);
+        IMMUTABLE_CLS.add(Double.class);
+        IMMUTABLE_CLS.add(UUID.class);
+        IMMUTABLE_CLS.add(IgniteUuid.class);
+        IMMUTABLE_CLS.add(BigDecimal.class);
+    }
+
     /**
      * @param ctx Kernal context.
      */
+    @SuppressWarnings("deprecation")
     public CacheObjectBinaryProcessorImpl(GridKernalContext ctx) {
         super(ctx);
 
@@ -277,7 +315,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** {@inheritDoc} */
-    @Override public void onDisconnected(IgniteFuture<?> reconnectFut) throws IgniteCheckedException {
+    @Override public void onDisconnected(IgniteFuture<?> reconnectFut) {
         this.reconnectFut = reconnectFut;
 
         if (transport != null)
@@ -291,7 +329,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
 
     /** {@inheritDoc} */
     @Override public IgniteInternalFuture<?> onReconnected(boolean clusterRestarted) throws IgniteCheckedException {
-        this.reconnectFut = null;
+        reconnectFut = null;
 
         return super.onReconnected(clusterRestarted);
     }
@@ -304,13 +342,33 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** {@inheritDoc} */
+    @Nullable @Override public CacheObject prepareForCache(@Nullable CacheObject obj, GridCacheContext cctx) {
+        if (obj == null)
+            return null;
+
+        return obj.prepareForCache(cctx.cacheObjectContext());
+    }
+
+    /** {@inheritDoc} */
     @Override public int typeId(String typeName) {
         if (binaryCtx == null)
-            return super.typeId(typeName);
+            return 0;
 
         return binaryCtx.typeId(typeName);
     }
 
+    /** {@inheritDoc} */
+    @Override public boolean immutable(Object obj) {
+        assert obj != null;
+
+        return IMMUTABLE_CLS.contains(obj.getClass());
+    }
+
+    /** {@inheritDoc} */
+    @Override public void onContinuousProcessorStarted(GridKernalContext ctx) {
+        // No-op.
+    }
+
     /**
      * @param obj Object.
      * @return Bytes.
@@ -462,7 +520,8 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** {@inheritDoc} */
-    @Override public void addMeta(final int typeId, final BinaryType newMeta, boolean failIfUnregistered) throws BinaryObjectException {
+    @Override public void addMeta(final int typeId, final BinaryType newMeta, boolean failIfUnregistered)
+        throws BinaryObjectException {
         assert newMeta != null;
         assert newMeta instanceof BinaryTypeImpl;
 
@@ -827,7 +886,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
             return field;
         }
         else {
-            affKeyFields.putIfAbsent(typeId, new T1<BinaryField>(null));
+            affKeyFields.putIfAbsent(typeId, new T1<>(null));
 
             return null;
         }
@@ -846,7 +905,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
         if (obj == null)
             return null;
 
-        return isBinaryObject(obj) ? ((BinaryObject)obj).field(fieldName) : super.field(obj, fieldName);
+        return isBinaryObject(obj) ? ((BinaryObject)obj).field(fieldName) : null;
     }
 
     /** {@inheritDoc} */
@@ -862,30 +921,44 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** {@inheritDoc} */
-    @Override public CacheObjectContext contextForCache(CacheConfiguration cfg) throws IgniteCheckedException {
-        assert cfg != null;
-
-        boolean binaryEnabled = marsh instanceof BinaryMarshaller && !GridCacheUtils.isSystemCache(cfg.getName()) &&
-            !GridCacheUtils.isIgfsCache(ctx.config(), cfg.getName());
-
-        CacheObjectContext ctx0 = super.contextForCache(cfg);
-
-        CacheObjectContext res = new CacheObjectBinaryContext(ctx,
-            cfg,
-            ctx0.copyOnGet(),
-            ctx0.storeValue(),
-            binaryEnabled,
-            ctx0.addDeploymentInfo());
-
-        ctx.resource().injectGeneric(res.defaultAffMapper());
-
-        return res;
+    @SuppressWarnings("deprecation")
+    @Override public CacheObjectContext contextForCache(CacheConfiguration ccfg) throws IgniteCheckedException {
+        assert ccfg != null;
+
+        boolean storeVal = !ccfg.isCopyOnRead() || (!isBinaryEnabled(ccfg) &&
+            (QueryUtils.isEnabled(ccfg) || ctx.config().isPeerClassLoadingEnabled()));
+
+        boolean binaryEnabled = marsh instanceof BinaryMarshaller && !GridCacheUtils.isSystemCache(ccfg.getName()) &&
+            !GridCacheUtils.isIgfsCache(ctx.config(), ccfg.getName());
+
+        AffinityKeyMapper cacheAffMapper = ccfg.getAffinityMapper();
+
+        boolean customAffMapper =
+            cacheAffMapper != null &&
+            !(cacheAffMapper instanceof CacheDefaultBinaryAffinityKeyMapper) &&
+            !(cacheAffMapper instanceof GridCacheDefaultAffinityKeyMapper);
+
+        AffinityKeyMapper dfltAffMapper = binaryEnabled ?
+            new CacheDefaultBinaryAffinityKeyMapper(ccfg.getKeyConfiguration()) :
+            new GridCacheDefaultAffinityKeyMapper();
+
+        ctx.resource().injectGeneric(dfltAffMapper);
+
+        return new CacheObjectContext(ctx,
+            ccfg.getName(),
+            dfltAffMapper,
+            customAffMapper,
+            ccfg.isCopyOnRead(),
+            storeVal,
+            ctx.config().isPeerClassLoadingEnabled() && !isBinaryEnabled(ccfg),
+            binaryEnabled
+        );
     }
 
     /** {@inheritDoc} */
     @Override public byte[] marshal(CacheObjectValueContext ctx, Object val) throws IgniteCheckedException {
         if (!ctx.binaryEnabled() || binaryMarsh == null)
-            return super.marshal(ctx, val);
+            return CU.marshal(ctx.kernalContext().cache().context(), ctx.addDeploymentInfo(), val);
 
         byte[] arr = binaryMarsh.marshal(val, false);
 
@@ -898,7 +971,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     @Override public Object unmarshal(CacheObjectValueContext ctx, byte[] bytes, ClassLoader clsLdr)
         throws IgniteCheckedException {
         if (!ctx.binaryEnabled() || binaryMarsh == null)
-            return super.unmarshal(ctx, bytes, clsLdr);
+            return U.unmarshal(ctx.kernalContext(), bytes, U.resolveClassLoader(clsLdr, ctx.kernalContext().config()));
 
         return binaryMarsh.unmarshal(bytes, clsLdr);
     }
@@ -906,8 +979,19 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     /** {@inheritDoc} */
     @Override public KeyCacheObject toCacheKeyObject(CacheObjectContext ctx, @Nullable GridCacheContext cctx,
         Object obj, boolean userObj) {
-        if (!ctx.binaryEnabled())
-            return super.toCacheKeyObject(ctx, cctx, obj, userObj);
+        if (!ctx.binaryEnabled()) {
+            if (obj instanceof KeyCacheObject) {
+                KeyCacheObject key = (KeyCacheObject)obj;
+
+                if (key.partition() == -1)
+                    // Assume all KeyCacheObjects except BinaryObject can not be reused for another cache.
+                    key.partition(partition(ctx, cctx, key));
+
+                return (KeyCacheObject)obj;
+            }
+
+            return toCacheKeyObject0(ctx, cctx, obj, userObj);
+        }
 
         if (obj instanceof KeyCacheObject) {
             KeyCacheObject key = (KeyCacheObject)obj;
@@ -926,7 +1010,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
         obj = toBinary(obj, false);
 
         if (obj instanceof BinaryObjectImpl) {
-            ((BinaryObjectImpl)obj).partition(partition(ctx, cctx, obj));
+            ((KeyCacheObject) obj).partition(partition(ctx, cctx, obj));
 
             return (KeyCacheObject)obj;
         }
@@ -934,11 +1018,33 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
         return toCacheKeyObject0(ctx, cctx, obj, userObj);
     }
 
+    /**
+     * @param obj Object.
+     * @param userObj If {@code true} then given object is object provided by user and should be copied
+     *        before stored in cache.
+     * @return Key cache object.
+     */
+    protected KeyCacheObject toCacheKeyObject0(CacheObjectContext ctx,
+        @Nullable GridCacheContext cctx,
+        Object obj,
+        boolean userObj) {
+        int part = partition(ctx, cctx, obj);
+
+        if (!userObj)
+            return new KeyCacheObjectImpl(obj, null, part);
+
+        return new UserKeyCacheObjectImpl(obj, part);
+    }
+
     /** {@inheritDoc} */
     @Nullable @Override public CacheObject toCacheObject(CacheObjectContext ctx, @Nullable Object obj,
         boolean userObj, boolean failIfUnregistered) {
-        if (!ctx.binaryEnabled())
-            return super.toCacheObject(ctx, obj, userObj, failIfUnregistered);
+        if (!ctx.binaryEnabled()) {
+            if (obj == null || obj instanceof CacheObject)
+                return (CacheObject)obj;
+
+            return toCacheObject0(obj, userObj);
+        }
 
         if (obj == null || obj instanceof CacheObject)
             return (CacheObject)obj;
@@ -951,23 +1057,136 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
         return toCacheObject0(obj, userObj);
     }
 
+    /**
+     * @param obj Object.
+     * @param userObj If {@code true} then given object is object provided by user and should be copied
+     *        before stored in cache.
+     * @return Cache object.
+     */
+    private CacheObject toCacheObject0(@Nullable Object obj, boolean userObj) {
+        assert obj != null;
+
+        if (obj instanceof byte[]) {
+            if (!userObj)
+                return new CacheObjectByteArrayImpl((byte[])obj);
+
+            return new UserCacheObjectByteArrayImpl((byte[])obj);
+        }
+
+        if (!userObj)
+            return new CacheObjectImpl(obj, null);
+
+        return new UserCacheObjectImpl(obj, null);
+    }
+
+    /**
+     * @param ctx Cache objects context.
+     * @param cctx Cache context.
+     * @param obj Object.
+     * @return Object partition.
+     */
+    private int partition(CacheObjectContext ctx, @Nullable GridCacheContext cctx, Object obj) {
+        try {
+            return cctx != null ?
+                cctx.affinity().partition(obj, false) :
+                ctx.kernalContext().affinity().partition0(ctx.cacheName(), obj, null);
+        }
+        catch (IgniteCheckedException e) {
+            U.error(log, "Failed to get partition", e);
+
+            return  -1;
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public CacheObject toCacheObject(CacheObjectContext ctx, byte type, byte[] bytes) {
-        if (type == BinaryObjectImpl.TYPE_BINARY)
-            return new BinaryObjectImpl(binaryContext(), bytes, 0);
-        else if (type == BinaryObjectImpl.TYPE_BINARY_ENUM)
-            return new BinaryEnumObjectImpl(binaryContext(), bytes);
+        switch (type) {
+            case BinaryObjectImpl.TYPE_BINARY:
+                return new BinaryObjectImpl(binaryContext(), bytes, 0);
 
-        return super.toCacheObject(ctx, type, bytes);
+            case BinaryObjectImpl.TYPE_BINARY_ENUM:
+                return new BinaryEnumObjectImpl(binaryContext(), bytes);
+
+            case CacheObject.TYPE_BYTE_ARR:
+                return new CacheObjectByteArrayImpl(bytes);
+
+            case CacheObject.TYPE_REGULAR:
+                return new CacheObjectImpl(null, bytes);
+        }
+
+        throw new IllegalArgumentException("Invalid object type: " + type);
     }
 
     /** {@inheritDoc} */
     @Override public KeyCacheObject toKeyCacheObject(CacheObjectContext ctx, byte type, byte[] bytes)
         throws IgniteCheckedException {
-        if (type == BinaryObjectImpl.TYPE_BINARY)
-            return new BinaryObjectImpl(binaryContext(), bytes, 0);
+        switch (type) {
+            case BinaryObjectImpl.TYPE_BINARY:
+                return new BinaryObjectImpl(binaryContext(), bytes, 0);
+
+            case CacheObject.TYPE_BYTE_ARR:
+                throw new IllegalArgumentException("Byte arrays cannot be used as cache keys.");
+
+            case CacheObject.TYPE_REGULAR:
+                return new KeyCacheObjectImpl(ctx.kernalContext().cacheObjects().unmarshal(ctx, bytes, null), bytes, -1);
+        }
+
+        throw new IllegalArgumentException("Invalid object type: " + type);
+    }
+
+    /** {@inheritDoc} */
+    @Override public CacheObject toCacheObject(CacheObjectContext ctx, ByteBuffer buf) {
+        int len = buf.getInt();
 
-        return super.toKeyCacheObject(ctx, type, bytes);
+        assert len >= 0 : len;
+
+        byte type = buf.get();
+
+        byte[] data = new byte[len];
+
+        buf.get(data);
+
+        return toCacheObject(ctx, type, data);
+    }
+
+    /** {@inheritDoc} */
+    @Override public IncompleteCacheObject toCacheObject(CacheObjectContext ctx, ByteBuffer buf,
+        @Nullable IncompleteCacheObject incompleteObj) {
+        if (incompleteObj == null)
+            incompleteObj = new IncompleteCacheObject(buf);
+
+        if (incompleteObj.isReady())
+            return incompleteObj;
+
+        incompleteObj.readData(buf);
+
+        if (incompleteObj.isReady())
+            incompleteObj.object(toCacheObject(ctx, incompleteObj.type(), incompleteObj.data()));
+
+        return incompleteObj;
+    }
+
+    /** {@inheritDoc} */
+    @Override public IncompleteCacheObject toKeyCacheObject(CacheObjectContext ctx, ByteBuffer buf,
+        @Nullable IncompleteCacheObject incompleteObj) throws IgniteCheckedException {
+        if (incompleteObj == null)
+            incompleteObj = new IncompleteCacheObject(buf);
+
+        if (incompleteObj.isReady())
+            return incompleteObj;
+
+        incompleteObj.readData(buf);
+
+        if (incompleteObj.isReady())
+            incompleteObj.object(toKeyCacheObject(ctx, incompleteObj.type(), incompleteObj.data()));
+
+        return incompleteObj;
+    }
+
+    /** {@inheritDoc} */
+    @Nullable @Override public CacheObject toCacheObject(CacheObjectContext ctx, @Nullable Object obj,
+        boolean userObj) {
+        return toCacheObject(ctx, obj, userObj, false);
     }
 
     /** {@inheritDoc} */
@@ -1177,6 +1396,7 @@ public class CacheObjectBinaryProcessorImpl extends IgniteCacheObjectProcessorIm
     }
 
     /** */
+    @SuppressWarnings("PublicInnerClass")
     public static class TestBinaryContext extends BinaryContext {
         /** */
         private List<TestBinaryContextListener> listeners;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
index 5f4cdcd..0ee8a0c 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/binary/IgniteBinaryImpl.java
@@ -37,12 +37,12 @@ public class IgniteBinaryImpl implements IgniteBinary {
     private GridKernalContext ctx;
 
     /** */
-    private CacheObjectBinaryProcessor proc;
+    private IgniteCacheObjectProcessor proc;
 
     /**
      * @param ctx Context.
      */
-    public IgniteBinaryImpl(GridKernalContext ctx, CacheObjectBinaryProcessor proc) {
+    public IgniteBinaryImpl(GridKernalContext ctx, IgniteCacheObjectProcessor proc) {
         this.ctx = ctx;
 
         this.proc = proc;

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
index 00495e1..238f99a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/wal/reader/StandaloneWalRecordsIterator.java
@@ -400,7 +400,7 @@ class StandaloneWalRecordsIterator extends AbstractWalRecordsIterator {
         IgniteCacheObjectProcessor processor
     ) throws IgniteCheckedException {
         final CacheObjectContext fakeCacheObjCtx = new CacheObjectContext(
-            kernalCtx, null, null, false, false, false);
+            kernalCtx, null, null, false, false, false, false, false);
 
         final List<DataEntry> entries = dataRec.writeEntries();
         final List<DataEntry> postProcessedEntries = new ArrayList<>(entries.size());

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
index 0759a93..f59a99e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessor.java
@@ -18,11 +18,18 @@
 package org.apache.ignite.internal.processors.cacheobject;
 
 import java.nio.ByteBuffer;
+import java.util.Collection;
+import java.util.Map;
+
 import org.apache.ignite.IgniteBinary;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
+import org.apache.ignite.binary.BinaryObject;
+import org.apache.ignite.binary.BinaryObjectBuilder;
+import org.apache.ignite.binary.BinaryType;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.internal.GridKernalContext;
+import org.apache.ignite.internal.binary.BinaryFieldMetadata;
 import org.apache.ignite.internal.processors.GridProcessor;
 import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.processors.cache.CacheObjectContext;
@@ -213,6 +220,116 @@ public interface IgniteCacheObjectProcessor extends GridProcessor {
 
     /**
      * @return Ignite binary interface.
+     * @throws IgniteException If failed.
+     */
+    public IgniteBinary binary() throws IgniteException;
+
+    /**
+     * @param clsName Class name.
+     * @return Builder.
+     */
+    public BinaryObjectBuilder builder(String clsName);
+
+    /**
+     * Creates builder initialized by existing binary object.
+     *
+     * @param binaryObj Binary object to edit.
+     * @return Binary builder.
+     */
+    public BinaryObjectBuilder builder(BinaryObject binaryObj);
+
+    /**
+     * @param typeId Type ID.
+     * @param newMeta New meta data.
+     * @param failIfUnregistered Fail if unregistered.
+     * @throws IgniteException In case of error.
+     */
+    public void addMeta(int typeId, final BinaryType newMeta, boolean failIfUnregistered) throws IgniteException;
+
+    /**
+     * Adds metadata locally without triggering discovery exchange.
+     *
+     * Must be used only during startup and only if it is guaranteed that all nodes have the same copy
+     * of BinaryType.
+     *
+     * @param typeId Type ID.
+     * @param newMeta New meta data.
+     * @throws IgniteException In case of error.
+     */
+    public void addMetaLocally(int typeId, final BinaryType newMeta) throws IgniteException;
+
+    /**
+     * @param typeId Type ID.
+     * @param typeName Type name.
+     * @param affKeyFieldName Affinity key field name.
+     * @param fieldTypeIds Fields map.
+     * @param isEnum Enum flag.
+     * @param enumMap Enum name to ordinal mapping.
+     * @throws IgniteException In case of error.
+     */
+    public void updateMetadata(int typeId, String typeName, @Nullable String affKeyFieldName,
+        Map<String, BinaryFieldMetadata> fieldTypeIds, boolean isEnum, @Nullable Map<String, Integer> enumMap)
+        throws IgniteException;
+
+    /**
+     * @param typeId Type ID.
+     * @return Meta data.
+     * @throws IgniteException In case of error.
+     */
+    @Nullable public BinaryType metadata(int typeId) throws IgniteException;
+
+
+    /**
+     * @param typeId Type ID.
+     * @param schemaId Schema ID.
+     * @return Meta data.
+     * @throws IgniteException In case of error.
+     */
+    @Nullable public BinaryType metadata(int typeId, int schemaId) throws IgniteException;
+
+    /**
+     * @param typeIds Type ID.
+     * @return Meta data.
+     * @throws IgniteException In case of error.
+     */
+    public Map<Integer, BinaryType> metadata(Collection<Integer> typeIds) throws IgniteException;
+
+    /**
+     * @return Metadata for all types.
+     * @throws IgniteException In case of error.
+     */
+    public Collection<BinaryType> metadata() throws IgniteException;
+
+    /**
+     * @param typeName Type name.
+     * @param ord ordinal.
+     * @return Enum object.
+     * @throws IgniteException If failed.
+     */
+    public BinaryObject buildEnum(String typeName, int ord) throws IgniteException;
+
+    /**
+     * @param typeName Type name.
+     * @param name Name.
+     * @return Enum object.
+     * @throws IgniteException If failed.
+     */
+    public BinaryObject buildEnum(String typeName, String name) throws IgniteException;
+
+    /**
+     * Register enum type
+     *
+     * @param typeName Type name.
+     * @param vals Mapping of enum constant names to ordinals.
+     * @return Binary Type for registered enum.
+     */
+    public BinaryType registerEnum(String typeName, Map<String, Integer> vals) throws IgniteException;
+
+    /**
+     * @param obj Original object.
+     * @param failIfUnregistered Throw exception if class isn't registered.
+     * @return Binary object (in case binary marshaller is used).
+     * @throws IgniteException If failed.
      */
-    public IgniteBinary binary();
+    public Object marshalToBinary(Object obj, boolean failIfUnregistered) throws IgniteException;
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
deleted file mode 100644
index 2170d54..0000000
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/IgniteCacheObjectProcessorImpl.java
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.internal.processors.cacheobject;
-
-import java.math.BigDecimal;
-import java.nio.ByteBuffer;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.UUID;
-import org.apache.ignite.IgniteBinary;
-import org.apache.ignite.IgniteCheckedException;
-import org.apache.ignite.IgniteException;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.internal.GridKernalContext;
-import org.apache.ignite.internal.processors.GridProcessorAdapter;
-import org.apache.ignite.internal.processors.cache.CacheObject;
-import org.apache.ignite.internal.processors.cache.CacheObjectByteArrayImpl;
-import org.apache.ignite.internal.processors.cache.CacheObjectContext;
-import org.apache.ignite.internal.processors.cache.CacheObjectImpl;
-import org.apache.ignite.internal.processors.cache.CacheObjectValueContext;
-import org.apache.ignite.internal.processors.cache.GridCacheContext;
-import org.apache.ignite.internal.processors.cache.GridCacheDefaultAffinityKeyMapper;
-import org.apache.ignite.internal.processors.cache.IncompleteCacheObject;
-import org.apache.ignite.internal.processors.cache.KeyCacheObject;
-import org.apache.ignite.internal.processors.cache.KeyCacheObjectImpl;
-import org.apache.ignite.internal.processors.query.QueryUtils;
-import org.apache.ignite.internal.util.typedef.internal.CU;
-import org.apache.ignite.internal.util.typedef.internal.U;
-import org.apache.ignite.lang.IgniteUuid;
-import org.jetbrains.annotations.Nullable;
-
-/**
- *
- */
-public class IgniteCacheObjectProcessorImpl extends GridProcessorAdapter implements IgniteCacheObjectProcessor {
-    /** Immutable classes. */
-    private static final Collection<Class<?>> IMMUTABLE_CLS = new HashSet<>();
-
-    /** */
-    private IgniteBinary noOpBinary = new NoOpBinary();
-
-    /*
-     * Static initializer
-     */
-    static {
-        IMMUTABLE_CLS.add(String.class);
-        IMMUTABLE_CLS.add(Boolean.class);
-        IMMUTABLE_CLS.add(Byte.class);
-        IMMUTABLE_CLS.add(Short.class);
-        IMMUTABLE_CLS.add(Character.class);
-        IMMUTABLE_CLS.add(Integer.class);
-        IMMUTABLE_CLS.add(Long.class);
-        IMMUTABLE_CLS.add(Float.class);
-        IMMUTABLE_CLS.add(Double.class);
-        IMMUTABLE_CLS.add(UUID.class);
-        IMMUTABLE_CLS.add(IgniteUuid.class);
-        IMMUTABLE_CLS.add(BigDecimal.class);
-    }
-
-    /**
-     * @param ctx Context.
-     */
-    public IgniteCacheObjectProcessorImpl(GridKernalContext ctx) {
-        super(ctx);
-    }
-
-    /** {@inheritDoc} */
-    @Override public IgniteBinary binary() {
-        return noOpBinary;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public CacheObject prepareForCache(@Nullable CacheObject obj, GridCacheContext cctx) {
-        if (obj == null)
-            return null;
-
-        return obj.prepareForCache(cctx.cacheObjectContext());
-    }
-
-    /** {@inheritDoc} */
-    @Override public byte[] marshal(CacheObjectValueContext ctx, Object val) throws IgniteCheckedException {
-        return CU.marshal(ctx.kernalContext().cache().context(), ctx.addDeploymentInfo(), val);
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object unmarshal(CacheObjectValueContext ctx, byte[] bytes, ClassLoader clsLdr)
-        throws IgniteCheckedException {
-        return U.unmarshal(ctx.kernalContext(), bytes, U.resolveClassLoader(clsLdr, ctx.kernalContext().config()));
-    }
-
-    /** {@inheritDoc} */
-    @Override public KeyCacheObject toCacheKeyObject(CacheObjectContext ctx,
-        @Nullable GridCacheContext cctx,
-        Object obj,
-        boolean userObj) {
-        if (obj instanceof KeyCacheObject) {
-            KeyCacheObject key = (KeyCacheObject)obj;
-
-            if (key.partition() == -1)
-                // Assume all KeyCacheObjects except BinaryObject can not be reused for another cache.
-                key.partition(partition(ctx, cctx, key));
-
-            return (KeyCacheObject)obj;
-        }
-
-        return toCacheKeyObject0(ctx, cctx, obj, userObj);
-    }
-
-    /**
-     * @param obj Object.
-     * @param userObj If {@code true} then given object is object provided by user and should be copied
-     *        before stored in cache.
-     * @return Key cache object.
-     */
-    protected KeyCacheObject toCacheKeyObject0(CacheObjectContext ctx,
-        @Nullable GridCacheContext cctx,
-        Object obj,
-        boolean userObj) {
-        int part = partition(ctx, cctx, obj);
-
-        if (!userObj)
-            return new KeyCacheObjectImpl(obj, null, part);
-
-        return new UserKeyCacheObjectImpl(obj, part);
-    }
-
-    /** {@inheritDoc} */
-    @Override public CacheObject toCacheObject(CacheObjectContext ctx, byte type, byte[] bytes) {
-        switch (type) {
-            case CacheObject.TYPE_BYTE_ARR:
-                return new CacheObjectByteArrayImpl(bytes);
-
-            case CacheObject.TYPE_REGULAR:
-                return new CacheObjectImpl(null, bytes);
-        }
-
-        throw new IllegalArgumentException("Invalid object type: " + type);
-    }
-
-    /** {@inheritDoc} */
-    @Override public KeyCacheObject toKeyCacheObject(CacheObjectContext ctx, byte type, byte[] bytes) throws IgniteCheckedException {
-        switch (type) {
-            case CacheObject.TYPE_BYTE_ARR:
-                throw new IllegalArgumentException("Byte arrays cannot be used as cache keys.");
-
-            case CacheObject.TYPE_REGULAR:
-                return new KeyCacheObjectImpl(ctx.kernalContext().cacheObjects().unmarshal(ctx, bytes, null), bytes, -1);
-        }
-
-        throw new IllegalArgumentException("Invalid object type: " + type);
-    }
-
-    /** {@inheritDoc} */
-    @Override public CacheObject toCacheObject(CacheObjectContext ctx, ByteBuffer buf) {
-        int len = buf.getInt();
-
-        assert len >= 0 : len;
-
-        byte type = buf.get();
-
-        byte[] data = new byte[len];
-
-        buf.get(data);
-
-        return toCacheObject(ctx, type, data);
-    }
-
-    /** {@inheritDoc} */
-    @Override public IncompleteCacheObject toCacheObject(
-        final CacheObjectContext ctx,
-        final ByteBuffer buf,
-        @Nullable IncompleteCacheObject incompleteObj
-    ) throws IgniteCheckedException {
-        if (incompleteObj == null)
-            incompleteObj = new IncompleteCacheObject(buf);
-
-        if (incompleteObj.isReady())
-            return incompleteObj;
-
-        incompleteObj.readData(buf);
-
-        if (incompleteObj.isReady())
-            incompleteObj.object(toCacheObject(ctx, incompleteObj.type(), incompleteObj.data()));
-
-        return incompleteObj;
-    }
-
-    /** {@inheritDoc} */
-    @Override public IncompleteCacheObject toKeyCacheObject(
-        final CacheObjectContext ctx,
-        final ByteBuffer buf,
-        @Nullable IncompleteCacheObject incompleteObj
-    ) throws IgniteCheckedException {
-        if (incompleteObj == null)
-            incompleteObj = new IncompleteCacheObject(buf);
-
-        if (incompleteObj.isReady())
-            return incompleteObj;
-
-        incompleteObj.readData(buf);
-
-        if (incompleteObj.isReady())
-            incompleteObj.object(toKeyCacheObject(ctx, incompleteObj.type(), incompleteObj.data()));
-
-        return incompleteObj;
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public CacheObject toCacheObject(CacheObjectContext ctx,
-        @Nullable Object obj,
-        boolean userObj) {
-        return toCacheObject(ctx, obj, userObj, false);
-    }
-
-    /** {@inheritDoc} */
-    @Nullable @Override public CacheObject toCacheObject(CacheObjectContext ctx, @Nullable Object obj, boolean userObj,
-        boolean failIfUnregistered) {
-        if (obj == null || obj instanceof CacheObject)
-            return (CacheObject)obj;
-
-        return toCacheObject0(obj, userObj);
-    }
-
-    /**
-     * @param obj Object.
-     * @param userObj If {@code true} then given object is object provided by user and should be copied
-     *        before stored in cache.
-     * @return Cache object.
-     */
-    protected CacheObject toCacheObject0(@Nullable Object obj, boolean userObj) {
-        assert obj != null;
-
-        if (obj instanceof byte[]) {
-            if (!userObj)
-                return new CacheObjectByteArrayImpl((byte[])obj);
-
-            return new UserCacheObjectByteArrayImpl((byte[])obj);
-        }
-
-        if (!userObj)
-            return new CacheObjectImpl(obj, null);
-
-        return new UserCacheObjectImpl(obj, null);
-    }
-
-    /**
-     * @param ctx Cache objects context.
-     * @param cctx Cache context.
-     * @param obj Object.
-     * @return Object partition.
-     */
-    protected final int partition(CacheObjectContext ctx, @Nullable GridCacheContext cctx, Object obj) {
-        try {
-            return cctx != null ?
-                cctx.affinity().partition(obj, false) :
-                ctx.kernalContext().affinity().partition0(ctx.cacheName(), obj, null);
-        }
-        catch (IgniteCheckedException e) {
-            U.error(log, "Failed to get partition", e);
-
-            return  -1;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override public CacheObjectContext contextForCache(CacheConfiguration ccfg) throws IgniteCheckedException {
-        assert ccfg != null;
-
-        boolean storeVal = !ccfg.isCopyOnRead() || (!isBinaryEnabled(ccfg) &&
-            (QueryUtils.isEnabled(ccfg) || ctx.config().isPeerClassLoadingEnabled()));
-
-        CacheObjectContext res = new CacheObjectContext(ctx,
-            ccfg.getName(),
-            ccfg.getAffinityMapper() != null ? ccfg.getAffinityMapper() : new GridCacheDefaultAffinityKeyMapper(),
-            ccfg.isCopyOnRead(),
-            storeVal,
-            ctx.config().isPeerClassLoadingEnabled() && !isBinaryEnabled(ccfg));
-
-        ctx.resource().injectGeneric(res.defaultAffMapper());
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean immutable(Object obj) {
-        assert obj != null;
-
-        return IMMUTABLE_CLS.contains(obj.getClass());
-    }
-
-    /** {@inheritDoc} */
-    @Override public void onContinuousProcessorStarted(GridKernalContext ctx) throws IgniteCheckedException {
-        // No-op.
-    }
-
-    /** {@inheritDoc} */
-    @Override public int typeId(String typeName) {
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object unwrapTemporary(GridCacheContext ctx, Object obj) throws IgniteException {
-        return obj;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isBinaryObject(Object obj) {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean isBinaryEnabled(CacheConfiguration<?, ?> ccfg) {
-        return false;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int typeId(Object obj) {
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override public Object field(Object obj, String fieldName) {
-        return null;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean hasField(Object obj, String fieldName) {
-        return false;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
index de57667..24bf22b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cacheobject/UserKeyCacheObjectImpl.java
@@ -44,7 +44,7 @@ public class UserKeyCacheObjectImpl extends KeyCacheObjectImpl {
      * @param key Key.
      * @param part Partition.
      */
-    UserKeyCacheObjectImpl(Object key, int part) {
+    public UserKeyCacheObjectImpl(Object key, int part) {
         super(key, null, part);
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
index 65c8205..eee21e2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryProcessor.java
@@ -682,7 +682,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
         ctx.cache().context().database().checkpointReadLock();
 
         try {
-            if (cacheInfo.isClientCache() && cacheInfo.isCacheContextInited() && idx.initCacheContext(cacheInfo.gridCacheContext()))
+            if (cacheInfo.isClientCache() && cacheInfo.isCacheContextInited() && idx.initCacheContext(cacheInfo.cacheContext()))
                 return;
 
             synchronized (stateMux) {
@@ -701,8 +701,15 @@ public class GridQueryProcessor extends GridProcessorAdapter {
 
                 if (!F.isEmpty(qryEntities)) {
                     for (QueryEntity qryEntity : qryEntities) {
-                        QueryTypeCandidate cand = QueryUtils.typeForQueryEntity(cacheName, schemaName, cacheInfo, qryEntity,
-                            mustDeserializeClss, escape);
+                        QueryTypeCandidate cand = QueryUtils.typeForQueryEntity(
+                            ctx,
+                            cacheName,
+                            schemaName,
+                            cacheInfo,
+                            qryEntity,
+                            mustDeserializeClss,
+                            escape
+                        );
 
                         cands.add(cand);
                     }
@@ -1448,7 +1455,7 @@ public class GridQueryProcessor extends GridProcessorAdapter {
                 SchemaIndexCacheVisitor visitor;
 
                 if (cacheInfo.isCacheContextInited()) {
-                    GridCacheContext cctx = cacheInfo.gridCacheContext();
+                    GridCacheContext cctx = cacheInfo.cacheContext();
 
                     SchemaIndexCacheFilter filter = new TableCacheFilter(cctx, op0.tableName());
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
index af42452..13ae9bf 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/GridQueryTypeDescriptor.java
@@ -138,6 +138,11 @@ public interface GridQueryTypeDescriptor {
     public String affinityKey();
 
     /**
+     * @return Whether custom affinity key mapper exists.
+     */
+    public boolean customAffinityKeyMapper();
+
+    /**
      * @return BinaryObject's type ID if indexed value is BinaryObject, otherwise value class' hash code.
      */
     public int typeId();

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
index 87394f6..722205b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryTypeDescriptorImpl.java
@@ -108,6 +108,9 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
     private String affKey;
 
     /** */
+    private boolean customAffKeyMapper;
+
+    /** */
     private String keyFieldName;
 
     /** */
@@ -123,7 +126,7 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
     private List<GridQueryProperty> propsWithDefaultValue;
 
     /** */
-    @Nullable private CacheObjectContext coCtx;
+    private final CacheObjectContext coCtx;
 
     /**
      * Constructor.
@@ -131,7 +134,7 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
      * @param cacheName Cache name.
      * @param coCtx Cache object context.
      */
-    public QueryTypeDescriptorImpl(String cacheName, @Nullable CacheObjectContext coCtx) {
+    public QueryTypeDescriptorImpl(String cacheName, CacheObjectContext coCtx) {
         this.cacheName = cacheName;
         this.coCtx = coCtx;
     }
@@ -481,6 +484,18 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
         this.affKey = affKey;
     }
 
+    /** {@inheritDoc} */
+    @Override public boolean customAffinityKeyMapper() {
+        return customAffKeyMapper;
+    }
+
+    /**
+     * @param customAffKeyMapper Whether custom affinity key mapper is set.
+     */
+    public void customAffinityKeyMapper(boolean customAffKeyMapper) {
+        this.customAffKeyMapper = customAffKeyMapper;
+    }
+
     /**
      * @return Aliases.
      */
@@ -564,14 +579,12 @@ public class QueryTypeDescriptorImpl implements GridQueryTypeDescriptor {
             boolean isKey = false;
 
             if (F.eq(prop.name(), keyFieldName) || (keyFieldName == null && F.eq(prop.name(), KEY_FIELD_NAME))) {
-                propVal = key instanceof KeyCacheObject && coCtx != null ?
-                    ((KeyCacheObject)key).value(coCtx, true) : key;
+                propVal = key instanceof KeyCacheObject ? ((CacheObject) key).value(coCtx, true) : key;
 
                 isKey = true;
             }
             else if (F.eq(prop.name(), valFieldName) || (valFieldName == null && F.eq(prop.name(), VAL_FIELD_NAME))) {
-                propVal = val instanceof CacheObject && coCtx != null ?
-                    ((CacheObject)val).value(coCtx, true) : val;
+                propVal = val instanceof CacheObject ? ((CacheObject)val).value(coCtx, true) : val;
             }
             else {
                 propVal = prop.value(key, val);

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
index 08d44bd..e251bd6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/query/QueryUtils.java
@@ -404,16 +404,15 @@ public class QueryUtils {
      * @return Type candidate.
      * @throws IgniteCheckedException If failed.
      */
-    public static QueryTypeCandidate typeForQueryEntity(String cacheName, String schemaName,
+    public static QueryTypeCandidate typeForQueryEntity(GridKernalContext ctx, String cacheName, String schemaName,
         GridCacheContextInfo cacheInfo,
         QueryEntity qryEntity, List<Class<?>> mustDeserializeClss, boolean escape)
         throws IgniteCheckedException {
-        GridKernalContext ctx = cacheInfo.context();
         CacheConfiguration<?, ?> ccfg = cacheInfo.config();
 
         boolean binaryEnabled = ctx.cacheObjects().isBinaryEnabled(ccfg);
 
-        CacheObjectContext coCtx = binaryEnabled ? ctx.cacheObjects().contextForCache(ccfg) : null;
+        CacheObjectContext coCtx = ctx.cacheObjects().contextForCache(ccfg);
 
         QueryTypeDescriptorImpl desc = new QueryTypeDescriptorImpl(cacheName, coCtx);
 
@@ -493,27 +492,31 @@ public class QueryUtils {
 
             String affField = null;
 
-            // Need to setup affinity key for distributed joins.
-            String keyType = qryEntity.getKeyType();
+            if (!coCtx.customAffinityMapper()) {
+                String keyType = qryEntity.getKeyType();
 
-            if (!cacheInfo.customAffinityMapper() && keyType != null) {
-                if (coCtx != null) {
+                if (keyType != null) {
                     CacheDefaultBinaryAffinityKeyMapper mapper =
                         (CacheDefaultBinaryAffinityKeyMapper)coCtx.defaultAffMapper();
 
                     BinaryField field = mapper.affinityKeyField(keyType);
 
-                    if (field != null)
-                        affField = field.name();
-                }
-            }
+                    if (field != null) {
+                        String affField0 = field.name();
 
-            if (affField != null) {
-                if (!escape)
-                    affField = normalizeObjectName(affField, false);
+                        if (!F.isEmpty(qryEntity.getKeyFields()) && qryEntity.getKeyFields().contains(affField0)) {
+                            affField = affField0;
 
-                desc.affinityKey(affField);
+                            if (!escape)
+                                affField = normalizeObjectName(affField, false);
+                        }
+                    }
+                }
             }
+            else
+                desc.customAffinityKeyMapper(true);
+
+            desc.affinityKey(affField);
         }
         else {
             processClassMeta(qryEntity, desc, coCtx);
@@ -531,6 +534,8 @@ public class QueryUtils {
                     desc.affinityKey(affField);
                 }
             }
+            else
+                desc.customAffinityKeyMapper(true);
 
             typeId = new QueryTypeIdKey(cacheName, valCls);
             altTypeId = new QueryTypeIdKey(cacheName, valTypeId);

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
index eaca668..17689aa 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/binary/BinaryMarshallerSelfTest.java
@@ -2601,7 +2601,7 @@ public class BinaryMarshallerSelfTest extends GridCommonAbstractTest {
 
         BinaryObjectImpl po = marshal(simpleObject(), marsh);
 
-        CacheObjectContext coCtx = new CacheObjectContext(newContext(), null, null, false, true, false);
+        CacheObjectContext coCtx = new CacheObjectContext(newContext(), null, null, false, false, true, false, false);
 
         assert po.value(coCtx, false) == po.value(coCtx, false);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
index a30ae20..167a7cd 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClientCacheInitializationFailTest.java
@@ -345,7 +345,7 @@ public class IgniteClientCacheInitializationFailTest extends GridCommonAbstractT
         /** {@inheritDoc} */
         @Override public void registerCache(String cacheName, String schemaName,
             GridCacheContextInfo<?, ?> cacheInfo) throws IgniteCheckedException {
-            if (FAILED_CACHES.contains(cacheInfo.name()) && cacheInfo.gridCacheContext().kernalContext().clientNode())
+            if (FAILED_CACHES.contains(cacheInfo.name()) && cacheInfo.cacheContext().kernalContext().clientNode())
                 throw new IgniteCheckedException("Test query exception " + cacheInfo.name() + " " + new Random().nextInt());
         }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
index 001f77c..0f6c03f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/db/wal/IgniteWalIteratorSwitchSegmentTest.java
@@ -40,6 +40,7 @@ import org.apache.ignite.internal.pagemem.wal.record.WALRecord;
 import org.apache.ignite.internal.processors.cache.GridCacheIoManager;
 import org.apache.ignite.internal.processors.cache.GridCacheSharedContext;
 import org.apache.ignite.internal.processors.cache.WalStateManager;
+import org.apache.ignite.internal.processors.cache.binary.CacheObjectBinaryProcessorImpl;
 import org.apache.ignite.internal.processors.cache.persistence.GridCacheDatabaseSharedManager;
 import org.apache.ignite.internal.processors.cache.persistence.IgniteCacheDatabaseSharedManager;
 import org.apache.ignite.internal.processors.cache.persistence.file.FileIO;
@@ -52,7 +53,6 @@ import org.apache.ignite.internal.processors.cache.persistence.wal.reader.Standa
 import org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordSerializer;
 import org.apache.ignite.internal.processors.cache.persistence.wal.serializer.RecordSerializerFactoryImpl;
 import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessor;
-import org.apache.ignite.internal.processors.cacheobject.IgniteCacheObjectProcessorImpl;
 import org.apache.ignite.internal.processors.subscription.GridInternalSubscriptionProcessor;
 import org.apache.ignite.internal.util.typedef.T2;
 import org.apache.ignite.internal.util.typedef.internal.U;
@@ -124,7 +124,7 @@ public class IgniteWalIteratorSwitchSegmentTest extends GridCommonAbstractTest {
         GridKernalContext kctx = new StandaloneGridKernalContext(
             log, null, null) {
             @Override public IgniteCacheObjectProcessor cacheObjects() {
-                return new IgniteCacheObjectProcessorImpl(this);
+                return new CacheObjectBinaryProcessorImpl(this);
             }
         };
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
index a8d447c..dfd677b 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/DmlStatementsProcessor.java
@@ -1233,7 +1233,7 @@ public class DmlStatementsProcessor {
                 IgniteQueryErrorCode.TABLE_NOT_FOUND);
         }
 
-        H2Utils.checkAndStartNotStartedCache(tbl);
+        H2Utils.checkAndStartNotStartedCache(ctx, tbl);
 
         UpdatePlan plan = UpdatePlanBuilder.planForBulkLoad(cmd, tbl);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCacheRegistry.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCacheRegistry.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCacheRegistry.java
index ca135f1..7c06cd0 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCacheRegistry.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2RowCacheRegistry.java
@@ -69,7 +69,7 @@ public class H2RowCacheRegistry {
             HashMap<Integer, H2RowCache> caches0 = copy();
 
             if (cacheInfo.affinityNode()) {
-                GridCacheContext cacheCtx = cacheInfo.gridCacheContext();
+                GridCacheContext cacheCtx = cacheInfo.cacheContext();
 
                 assert cacheCtx != null;
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/c1edb300/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
----------------------------------------------------------------------
diff --git a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
index 7ec8b9b..5a0cc44 100644
--- a/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
+++ b/modules/indexing/src/main/java/org/apache/ignite/internal/processors/query/h2/H2TableDescriptor.java
@@ -174,7 +174,7 @@ public class H2TableDescriptor implements GridH2SystemIndexFactory {
      * @return Cache context.
      */
     public GridCacheContext cache() {
-        return cacheInfo.gridCacheContext();
+        return cacheInfo.cacheContext();
     }
 
     /**
@@ -204,7 +204,7 @@ public class H2TableDescriptor implements GridH2SystemIndexFactory {
      */
     H2RowFactory rowFactory(GridH2RowDescriptor rowDesc) {
         if (cacheInfo.affinityNode())
-            return new H2RowFactory(rowDesc, cacheInfo.gridCacheContext());
+            return new H2RowFactory(rowDesc, cacheInfo.cacheContext());
 
         return null;
     }
@@ -437,7 +437,7 @@ public class H2TableDescriptor implements GridH2SystemIndexFactory {
         if (cacheInfo.affinityNode()) {
             assert pkHashIdx == null : pkHashIdx;
 
-            pkHashIdx = new H2PkHashIndex(cacheInfo.gridCacheContext(), tbl, PK_HASH_IDX_NAME, cols);
+            pkHashIdx = new H2PkHashIndex(cacheInfo.cacheContext(), tbl, PK_HASH_IDX_NAME, cols);
 
             return pkHashIdx;
         }


[24/52] [abbrv] ignite git commit: IGNITE-10289: [ML] Import models from XGBoost

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-data.txt
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-data.txt b/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-data.txt
new file mode 100644
index 0000000..a5be7ab
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/test/resources/datasets/agaricus-test-data.txt
@@ -0,0 +1,1611 @@
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 4:1 10:1 19:1 21:1 23:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 10:1 19:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 3:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 3:1 7:1 20:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 4:1 10:1 19:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 4:1 7:1 20:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 7:1 19:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 123:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 7:1 20:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 124:1
+0 3:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 6:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 6:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 123:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 1:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 4:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 123:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 1:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 122:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 45:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 1:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+0 4:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 19:1 21:1 23:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 123:1
+0 4:1 10:1 20:1 21:1 23:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 4:1 10:1 20:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 19:1 21:1 23:1 34:1 37:1 40:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 7:1 19:1 21:1 24:1 34:1 37:1 40:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 1:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 10:1 20:1 21:1 24:1 34:1 37:1 40:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 111:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 123:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 123:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 6:1 7:1 11:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 9:1 19:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 124:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 11:1 21:1 24:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 123:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 51:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 1:1 10:1 20:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 122:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 48:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 1:1 9:1 19:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 122:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 3:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 9:1 20:1 21:1 24:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 11:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 60:1 65:1 67:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 1:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 45:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 120:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 124:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 10:1 19:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+1 4:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 114:1 120:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 19:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 120:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 51:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 124:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 117:1 120:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 48:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 124:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 19:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 11:1 22:1 29:1 34:1 37:1 39:1 42:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 44:1 54:1 58:1 62:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 48:1 54:1 58:1 62:1 66:1 77:1 86:1 88:1 92:1 95:1 98:1 105:1 117:1 120:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 37:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 37:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 19:1 22:1 25:1 34:1 36:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 36:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 16:1 22:1 25:1 34:1 37:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 16:1 22:1 25:1 34:1 36:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+1 3:1 7:1 16:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 75:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 19:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 75:1 79:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 37:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 117:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 7:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 71:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+1 4:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 45:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 4:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 75:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 123:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 75:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 36:1 40:1 49:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 120:1
+1 3:1 10:1 16:1 22:1 25:1 34:1 37:1 40:1 45:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 3:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 75:1 84:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+0 4:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 75:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 84:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 18:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+0 3:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 84:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 84:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+1 3:1 10:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 118:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 37:1 40:1 48:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 18:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 25:1 34:1 36:1 40:1 42:1 53:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 126:1
+0 4:1 9:1 11:1 21:1 29:1 34:1 36:1 39:1 49:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 106:1 119:1 126:1
+1 3:1 7:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 73:1 82:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 4:1 9:1 14:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 84:1 88:1 92:1 95:1 100:1 108:1 119:1 123:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 79:1 88:1 92:1 95:1 100:1 108:1 119:1 126:1
+0 4:1 9:1 14:1 21:1 29:1 34:1 36:1 39:1 42:1 54:1 55:1 65:1 69:1 77:1 82:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+0 3:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 51:1 54:1 55:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 119:1 126:1
+1 4:1 9:1 14:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 70:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 126:1
+0 4:1 7:1 14:1 21:1 29:1 34:1 36:1 39:1 48:1 54:1 55:1 65:1 69:1 73:1 86:1 88:1 92:1 95:1 102:1 105:1 118:1 126:1
+1 3:1 9:1 20:1 22:1 27:1 34:1 36:1 39:1 48:1 53:1 55:1 64:1 68:1 70:1 79:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+1 3:1 7:1 20:1 22:1 27:1 34:1 36:1 39:1 44:1 53:1 55:1 64:1 68:1 71:1 80:1 88:1 92:1 95:1 100:1 108:1 118:1 120:1
+

<TRUNCATED>

[22/52] [abbrv] ignite git commit: IGNITE-10257 control.sh utility should request SSL keystore and truststore passwords if necessary - Fixes #5647.

Posted by sb...@apache.org.
IGNITE-10257 control.sh utility should request SSL keystore and truststore passwords if necessary - Fixes #5647.

Signed-off-by: Alexey Goncharuk <al...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ece5869b
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ece5869b
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ece5869b

Branch: refs/heads/ignite-627
Commit: ece5869bb9e7ff638352f07b63192ec2867afb8a
Parents: afe23b6
Author: Sergey Antonov <an...@gmail.com>
Authored: Tue Dec 18 17:48:48 2018 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Tue Dec 18 17:48:48 2018 +0300

----------------------------------------------------------------------
 .../internal/commandline/CommandHandler.java    | 208 ++++++++++++-------
 1 file changed, 129 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/ece5869b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
index 44f652c..9923fb4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/commandline/CommandHandler.java
@@ -155,6 +155,7 @@ import static org.apache.ignite.internal.visor.baseline.VisorBaselineOperation.V
 import static org.apache.ignite.internal.visor.verify.VisorViewCacheCmd.CACHES;
 import static org.apache.ignite.internal.visor.verify.VisorViewCacheCmd.GROUPS;
 import static org.apache.ignite.internal.visor.verify.VisorViewCacheCmd.SEQ;
+import static org.apache.ignite.ssl.SslContextFactory.DFLT_SSL_PROTOCOL;
 
 /**
  * Class that execute several commands passed via command line.
@@ -367,14 +368,7 @@ public class CommandHandler {
     private static final String UTILITY_NAME = "control.sh";
 
     /** Common options. */
-    private static final String COMMON_OPTIONS = String.join(" ", op(CMD_HOST, "HOST_OR_IP"), op(CMD_PORT, "PORT"),
-        op(CMD_USER, "USER"), op(CMD_PASSWORD, "PASSWORD"),
-        op(CMD_PING_INTERVAL, "PING_INTERVAL"), op(CMD_PING_TIMEOUT, "PING_TIMEOUT"),
-        op(CMD_SSL_PROTOCOL, "SSL_PROTOCOL[, SSL_PROTOCOL_2, ...]"),
-        op(CMD_SSL_CIPHER_SUITES, "SSL_CIPHER_1[, SSL_CIPHER_2, ...]"),
-        op(CMD_SSL_KEY_ALGORITHM, "SSL_KEY_ALGORITHM"),
-        op(CMD_KEYSTORE_TYPE, "KEYSTORE_TYPE"), op(CMD_KEYSTORE, "KEYSTORE"), op(CMD_KEYSTORE_PASSWORD, "KEYSTORE_PASSWORD"),
-        op(CMD_TRUSTSTORE_TYPE, "TRUSTSTORE_TYPE"), op(CMD_TRUSTSTORE, "TRUSTSTORE"), op(CMD_TRUSTSTORE_PASSWORD, "TRUSTSTORE_PASSWORD"));
+    private static final String COMMON_OPTIONS = String.join(" ", getCommonOptions());
 
     /** Utility name with common options. */
     private static final String UTILITY_NAME_WITH_COMMON_OPTIONS = String.join(" ", UTILITY_NAME, COMMON_OPTIONS);
@@ -401,6 +395,34 @@ public class CommandHandler {
     private final boolean enableExperimental = IgniteSystemProperties.getBoolean(IGNITE_ENABLE_EXPERIMENTAL_COMMAND, false);
 
     /**
+     * Creates list of common utility options.
+     *
+     * @return List of common utility options.
+     */
+    private static List<String> getCommonOptions() {
+        List<String> list = new ArrayList<>(32);
+
+        list.add(op(CMD_HOST, "HOST_OR_IP"));
+        list.add(op(CMD_PORT, "PORT"));
+        list.add(op(CMD_USER, "USER"));
+        list.add(op(CMD_PASSWORD, "PASSWORD"));
+        list.add(op(CMD_PING_INTERVAL, "PING_INTERVAL"));
+        list.add(op(CMD_PING_TIMEOUT, "PING_TIMEOUT"));
+
+        list.add(op(CMD_SSL_PROTOCOL, "SSL_PROTOCOL[, SSL_PROTOCOL_2, ...]"));
+        list.add(op(CMD_SSL_CIPHER_SUITES, "SSL_CIPHER_1[, SSL_CIPHER_2, ...]"));
+        list.add(op(CMD_SSL_KEY_ALGORITHM, "SSL_KEY_ALGORITHM"));
+        list.add(op(CMD_KEYSTORE_TYPE, "KEYSTORE_TYPE"));
+        list.add(op(CMD_KEYSTORE, "KEYSTORE"));
+        list.add(op(CMD_KEYSTORE_PASSWORD, "KEYSTORE_PASSWORD"));
+        list.add(op(CMD_TRUSTSTORE_TYPE, "TRUSTSTORE_TYPE"));
+        list.add(op(CMD_TRUSTSTORE, "TRUSTSTORE"));
+        list.add(op(CMD_TRUSTSTORE_PASSWORD, "TRUSTSTORE_PASSWORD"));
+
+        return list;
+    }
+
+    /**
      * Output specified string to console.
      *
      * @param s String to output.
@@ -649,7 +671,9 @@ public class CommandHandler {
      * @return List of hosts.
      */
     private Stream<IgniteBiTuple<GridClientNode, String>> listHosts(GridClient client) throws GridClientException {
-        return client.compute().nodes(GridClientNode::connectable).stream()
+        return client.compute()
+            .nodes(GridClientNode::connectable)
+            .stream()
             .flatMap(node -> Stream.concat(
                 node.tcpAddresses() == null ? Stream.empty() : node.tcpAddresses().stream(),
                 node.tcpHostNames() == null ? Stream.empty() : node.tcpHostNames().stream()
@@ -661,14 +685,17 @@ public class CommandHandler {
      * @param client Client.
      * @return List of hosts.
      */
-    private Stream<IgniteBiTuple<GridClientNode, List<String>>> listHostsByClientNode(GridClient client) throws GridClientException {
+    private Stream<IgniteBiTuple<GridClientNode, List<String>>> listHostsByClientNode(
+        GridClient client
+    ) throws GridClientException {
         return client.compute().nodes(GridClientNode::connectable).stream()
             .map(node -> new IgniteBiTuple<>(node,
                 Stream.concat(
                     node.tcpAddresses() == null ? Stream.empty() : node.tcpAddresses().stream(),
                     node.tcpHostNames() == null ? Stream.empty() : node.tcpHostNames().stream()
                 )
-                .map(addr -> addr + ":" + node.tcpPort()).collect(Collectors.toList())));
+                .map(addr -> addr + ":" + node.tcpPort()).collect(Collectors.toList()))
+            );
     }
 
     /**
@@ -1835,7 +1862,7 @@ public class CommandHandler {
 
         VisorTxTaskArg txArgs = null;
 
-        String sslProtocol = SslContextFactory.DFLT_SSL_PROTOCOL;
+        String sslProtocol = DFLT_SSL_PROTOCOL;
 
         String sslCipherSuites = "";
 
@@ -2416,6 +2443,41 @@ public class CommandHandler {
     }
 
     /**
+     * Requests password from console with message.
+     *
+     * @param msg Message.
+     * @return Password.
+     */
+    private char[] requestPasswordFromConsole(String msg) {
+        Console console = System.console();
+
+        if (console == null)
+            throw new UnsupportedOperationException("Failed to securely read password (console is unavailable): " + msg);
+        else
+            return console.readPassword(msg);
+    }
+
+    /**
+     * Requests user data from console with message.
+     *
+     * @param msg Message.
+     * @return Input user data.
+     */
+    private String requestDataFromConsole(String msg) {
+        Console console = System.console();
+
+        if (console != null)
+            return console.readLine(msg);
+        else {
+            Scanner scanner = new Scanner(System.in);
+
+            log(msg);
+
+            return scanner.nextLine();
+        }
+    }
+
+    /**
      * Check if raw arg is command or option.
      *
      * @return {@code true} If raw arg is command, overwise {@code false}.
@@ -2542,6 +2604,52 @@ public class CommandHandler {
             .collect(Collectors.toList());
     }
 
+    /** */
+    private void printHelp() {
+        log("This utility can do the following commands:");
+
+        usage(i("Activate cluster:"), ACTIVATE);
+        usage(i("Deactivate cluster:"), DEACTIVATE, op(CMD_AUTO_CONFIRMATION));
+        usage(i("Print current cluster state:"), STATE);
+        usage(i("Print cluster baseline topology:"), BASELINE);
+        usage(i("Add nodes into baseline topology:"), BASELINE, BASELINE_ADD, "consistentId1[,consistentId2,....,consistentIdN]", op(CMD_AUTO_CONFIRMATION));
+        usage(i("Remove nodes from baseline topology:"), BASELINE, BASELINE_REMOVE, "consistentId1[,consistentId2,....,consistentIdN]", op(CMD_AUTO_CONFIRMATION));
+        usage(i("Set baseline topology:"), BASELINE, BASELINE_SET, "consistentId1[,consistentId2,....,consistentIdN]", op(CMD_AUTO_CONFIRMATION));
+        usage(i("Set baseline topology based on version:"), BASELINE, BASELINE_SET_VERSION + " topologyVersion", op(CMD_AUTO_CONFIRMATION));
+        usage(i("List or kill transactions:"), TX, op(TX_XID, "XID"), op(TX_DURATION, "SECONDS"), op(TX_SIZE, "SIZE"), op(TX_LABEL, "PATTERN_REGEX"), op(or(TX_SERVERS, TX_CLIENTS)), op(TX_NODES, "consistentId1[,consistentId2,....,consistentIdN]"), op(TX_LIMIT, "NUMBER"), op(TX_ORDER, or("DURATION", "SIZE", CMD_TX_ORDER_START_TIME)), op(TX_KILL), op(CMD_AUTO_CONFIRMATION));
+
+        if (enableExperimental) {
+            usage(i("Print absolute paths of unused archived wal segments on each node:"), WAL, WAL_PRINT, "[consistentId1,consistentId2,....,consistentIdN]");
+            usage(i("Delete unused archived wal segments on each node:"), WAL, WAL_DELETE, "[consistentId1,consistentId2,....,consistentIdN] ", op(CMD_AUTO_CONFIRMATION));
+        }
+
+        log(i("View caches information in a cluster. For more details type:"));
+        log(i(String.join(" ", UTILITY_NAME, CACHE.text(), HELP.text()), 2));
+        nl();
+
+        log("By default commands affecting the cluster require interactive confirmation.");
+        log("Use " + CMD_AUTO_CONFIRMATION + " option to disable it.");
+        nl();
+
+        log("Default values:");
+        log(i("HOST_OR_IP=" + DFLT_HOST, 2));
+        log(i("PORT=" + DFLT_PORT, 2));
+        log(i("PING_INTERVAL=" + DFLT_PING_INTERVAL, 2));
+        log(i("PING_TIMEOUT=" + DFLT_PING_TIMEOUT, 2));
+        log(i("SSL_PROTOCOL=" + DFLT_SSL_PROTOCOL, 2));
+        log(i("SSL_KEY_ALGORITHM=" + SslContextFactory.DFLT_KEY_ALGORITHM, 2));
+        log(i("KEY_STORE_TYPE=" + SslContextFactory.DFLT_STORE_TYPE, 2));
+        log(i("TRUST_STORE_TYPE=" + SslContextFactory.DFLT_STORE_TYPE, 2));
+        nl();
+
+        log("Exit codes:");
+        log(i(EXIT_CODE_OK + " - successful execution.", 2));
+        log(i(EXIT_CODE_INVALID_ARGUMENTS + " - invalid arguments.", 2));
+        log(i(EXIT_CODE_CONNECTION_FAILED + " - connection failed.", 2));
+        log(i(ERR_AUTHENTICATION_FAILED + " - authentication failed.", 2));
+        log(i(EXIT_CODE_UNEXPECTED_ERROR + " - unexpected error.", 2));
+    }
+
     /**
      * Parse and execute command.
      *
@@ -2556,48 +2664,7 @@ public class CommandHandler {
 
         try {
             if (F.isEmpty(rawArgs) || (rawArgs.size() == 1 && CMD_HELP.equalsIgnoreCase(rawArgs.get(0)))) {
-                log("This utility can do the following commands:");
-
-                usage(i("Activate cluster:"), ACTIVATE);
-                usage(i("Deactivate cluster:"), DEACTIVATE, op(CMD_AUTO_CONFIRMATION));
-                usage(i("Print current cluster state:"), STATE);
-                usage(i("Print cluster baseline topology:"), BASELINE);
-                usage(i("Add nodes into baseline topology:"), BASELINE, BASELINE_ADD, "consistentId1[,consistentId2,....,consistentIdN]", op(CMD_AUTO_CONFIRMATION));
-                usage(i("Remove nodes from baseline topology:"), BASELINE, BASELINE_REMOVE, "consistentId1[,consistentId2,....,consistentIdN]", op(CMD_AUTO_CONFIRMATION));
-                usage(i("Set baseline topology:"), BASELINE, BASELINE_SET, "consistentId1[,consistentId2,....,consistentIdN]", op(CMD_AUTO_CONFIRMATION));
-                usage(i("Set baseline topology based on version:"), BASELINE, BASELINE_SET_VERSION + " topologyVersion", op(CMD_AUTO_CONFIRMATION));
-                usage(i("List or kill transactions:"), TX, op(TX_XID, "XID"), op(TX_DURATION, "SECONDS"), op(TX_SIZE, "SIZE"), op(TX_LABEL, "PATTERN_REGEX"), op(or(TX_SERVERS, TX_CLIENTS)), op(TX_NODES, "consistentId1[,consistentId2,....,consistentIdN]"), op(TX_LIMIT, "NUMBER"), op(TX_ORDER, or("DURATION", "SIZE", CMD_TX_ORDER_START_TIME)), op(TX_KILL), op(CMD_AUTO_CONFIRMATION));
-
-                if (enableExperimental) {
-                    usage(i("Print absolute paths of unused archived wal segments on each node:"), WAL, WAL_PRINT, "[consistentId1,consistentId2,....,consistentIdN]");
-                    usage(i("Delete unused archived wal segments on each node:"), WAL, WAL_DELETE, "[consistentId1,consistentId2,....,consistentIdN] ", op(CMD_AUTO_CONFIRMATION));
-                }
-
-                log(i("View caches information in a cluster. For more details type:"));
-                log(i(String.join(" ", UTILITY_NAME, CACHE.text(), HELP.text()), 2));
-                nl();
-
-                log("By default commands affecting the cluster require interactive confirmation.");
-                log("Use " + CMD_AUTO_CONFIRMATION + " option to disable it.");
-                nl();
-
-                log("Default values:");
-                log(i("HOST_OR_IP=" + DFLT_HOST, 2));
-                log(i("PORT=" + DFLT_PORT, 2));
-                log(i("PING_INTERVAL=" + DFLT_PING_INTERVAL, 2));
-                log(i("PING_TIMEOUT=" + DFLT_PING_TIMEOUT, 2));
-                log(i("SSL_PROTOCOL=" + SslContextFactory.DFLT_SSL_PROTOCOL, 2));
-                log(i("SSL_KEY_ALGORITHM=" + SslContextFactory.DFLT_KEY_ALGORITHM, 2));
-                log(i("KEY_STORE_TYPE=" + SslContextFactory.DFLT_STORE_TYPE, 2));
-                log(i("TRUST_STORE_TYPE=" + SslContextFactory.DFLT_STORE_TYPE, 2));
-                nl();
-
-                log("Exit codes:");
-                log(i(EXIT_CODE_OK + " - successful execution.", 2));
-                log(i(EXIT_CODE_INVALID_ARGUMENTS + " - invalid arguments.", 2));
-                log(i(EXIT_CODE_CONNECTION_FAILED + " - connection failed.", 2));
-                log(i(ERR_AUTHENTICATION_FAILED + " - authentication failed.", 2));
-                log(i(EXIT_CODE_UNEXPECTED_ERROR + " - unexpected error.", 2));
+                printHelp();
 
                 return EXIT_CODE_OK;
             }
@@ -2650,7 +2717,7 @@ public class CommandHandler {
 
                     List<String> sslProtocols = split(args.sslProtocol(), ",");
 
-                    String sslProtocol = F.isEmpty(sslProtocols) ? SslContextFactory.DFLT_SSL_PROTOCOL : sslProtocols.get(0);
+                    String sslProtocol = F.isEmpty(sslProtocols) ? DFLT_SSL_PROTOCOL : sslProtocols.get(0);
 
                     factory.setProtocol(sslProtocol);
                     factory.setKeyAlgorithm(args.sslKeyAlgorithm());
@@ -2660,13 +2727,12 @@ public class CommandHandler {
 
                     factory.setCipherSuites(split(args.getSslCipherSuites(), ","));
 
-                    if (args.sslKeyStorePath() == null)
-                        throw new IllegalArgumentException("SSL key store location is not specified.");
-
                     factory.setKeyStoreFilePath(args.sslKeyStorePath());
 
                     if (args.sslKeyStorePassword() != null)
                         factory.setKeyStorePassword(args.sslKeyStorePassword());
+                    else
+                        factory.setKeyStorePassword(requestPasswordFromConsole("SSL keystore password: "));
 
                     factory.setKeyStoreType(args.sslKeyStoreType());
 
@@ -2677,6 +2743,8 @@ public class CommandHandler {
 
                         if (args.sslTrustStorePassword() != null)
                             factory.setTrustStorePassword(args.sslTrustStorePassword());
+                        else
+                            factory.setTrustStorePassword(requestPasswordFromConsole("SSL truststore password: "));
 
                         factory.setTrustStoreType(args.sslTrustStoreType());
                     }
@@ -2726,27 +2794,10 @@ public class CommandHandler {
                     if (tryConnectMaxCount > 0 && isAuthError(e)) {
                         log("Authentication error, try connection again.");
 
-                        final Console console = System.console();
-
-                        if (console != null) {
-                            if (F.isEmpty(args.getUserName()))
-                                args.setUserName(console.readLine("user: "));
+                        if (F.isEmpty(args.getUserName()))
+                            args.setUserName(requestDataFromConsole("user: "));
 
-                            args.setPassword(new String(console.readPassword("password: ")));
-                        }
-                        else {
-                            Scanner scanner = new Scanner(System.in);
-
-                            if (F.isEmpty(args.getUserName())) {
-                                log("user: ");
-
-                                args.setUserName(scanner.next());
-                            }
-
-                            log("password: ");
-
-                            args.setPassword(scanner.next());
-                        }
+                        args.setPassword(new String(requestPasswordFromConsole("password: ")));
 
                         tryConnectAgain = true;
 
@@ -2791,7 +2842,6 @@ public class CommandHandler {
      *
      * @return Last operation result;
      */
-    @SuppressWarnings("unchecked")
     public <T> T getLastOperationResult() {
         return (T)lastOperationRes;
     }


[26/52] [abbrv] ignite git commit: IGNITE-10289: [ML] Import models from XGBoost

Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/datasets/agaricus-test-expected-results.txt
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/datasets/agaricus-test-expected-results.txt b/examples/src/main/resources/datasets/agaricus-test-expected-results.txt
new file mode 100644
index 0000000..b6947fd
--- /dev/null
+++ b/examples/src/main/resources/datasets/agaricus-test-expected-results.txt
@@ -0,0 +1,1611 @@
+0.00025412877
+0.99888784
+0.00025412877
+0.00020371929
+0.0016852723
+0.004336959
+0.99888605
+0.00025412877
+0.99888784
+0.0007407177
+0.99888784
+0.00048179296
+6.019019e-06
+0.00025412877
+7.060129e-06
+0.0003617697
+0.00047204422
+0.99879885
+0.0012118616
+0.00040873847
+0.00047204422
+0.0003617697
+0.00025412877
+0.0004505964
+0.00031991434
+0.9996768
+0.004901804
+0.00052038184
+0.0004505964
+6.019019e-06
+0.00020371929
+0.00052038184
+0.00065504765
+0.0011316377
+0.0002305175
+0.00047204422
+0.004901804
+0.9993381
+0.0002305175
+0.00047204422
+0.0011316377
+0.00020371929
+0.00019959644
+0.0002305175
+0.0002305175
+0.0021919373
+0.0008000284
+0.0051317057
+0.0012118616
+0.00052038184
+0.0003617697
+0.00019959644
+0.99951875
+0.00040873847
+0.00022004127
+0.00039074913
+0.00020371929
+0.00019959644
+0.00040873847
+0.00052038184
+0.0014905198
+7.905719e-06
+0.9994962
+7.905719e-06
+0.99888784
+0.0004505964
+0.9994567
+0.00052038184
+0.00019959644
+0.0004370383
+0.00065504765
+0.0023671745
+0.00019959644
+7.060129e-06
+0.0011316377
+0.00025412877
+0.00065504765
+5.322418e-06
+0.00037842535
+6.243038e-06
+0.0008000284
+0.0013067605
+0.00040873847
+0.0017210845
+0.00025412877
+0.00022004127
+0.9993862
+0.99888784
+0.00019959644
+0.0003455418
+0.0007407177
+0.0002305175
+0.00022004127
+0.0007075034
+0.00019959644
+0.0002305175
+0.0004370383
+0.0004505964
+0.0016852723
+0.0011316377
+0.0002352789
+0.0057994546
+0.0008000284
+0.0031079606
+0.00065504765
+0.00039074913
+0.00018479073
+0.00040873847
+0.0004370383
+0.0023447894
+0.0010494431
+0.0003617697
+0.00052038184
+0.00022004127
+7.060129e-06
+0.9989686
+0.00025412877
+0.0027754887
+0.0012795585
+0.0025701027
+0.00037842535
+0.00040873847
+0.00031991434
+0.0004505964
+0.0015961447
+0.0015961447
+0.00037842535
+5.322418e-06
+0.00025412877
+0.0007407177
+0.00040873847
+0.0002305175
+0.00039074913
+0.0011866327
+0.0016852723
+0.0011866327
+0.00047204422
+0.00022004127
+0.0015629282
+0.99941325
+0.00052038184
+0.00052038184
+7.6220385e-06
+0.00018479073
+0.0007075034
+0.00040873847
+5.322418e-06
+0.00018479073
+0.9993862
+0.00039074913
+0.0057447995
+0.0007075034
+0.0043782797
+0.00047204422
+0.0002305175
+0.004336959
+0.0003455418
+0.0017210845
+0.00048179296
+0.00037842535
+0.99965084
+0.9989686
+0.00019959644
+0.00031991434
+0.00020371929
+0.0043782797
+0.9994567
+0.00040873847
+0.00041718033
+0.002676164
+0.0028780429
+0.0003455418
+0.005320857
+0.99879885
+0.0008000284
+0.0057994546
+0.9996768
+0.0004505964
+0.0011866327
+0.00019959644
+0.00020587152
+0.0004505964
+0.005083311
+3.2162723e-05
+0.0003455418
+0.00040873847
+6.7399155e-06
+0.00047204422
+0.999337
+5.322418e-06
+8.940421e-06
+0.99893767
+0.99888605
+7.6220385e-06
+0.99965084
+0.0031376088
+7.060129e-06
+7.905719e-06
+6.243038e-06
+0.00022004127
+4.237742e-05
+0.99965084
+6.7399155e-06
+5.322418e-06
+7.060129e-06
+8.940421e-06
+0.00052038184
+0.0053715007
+0.00019060042
+0.00031991434
+0.00041718033
+6.7399155e-06
+4.237742e-05
+0.0007075034
+0.00047204422
+6.019019e-06
+0.00041718033
+0.0017210845
+7.905719e-06
+0.9989686
+6.019019e-06
+0.9994567
+7.060129e-06
+7.6220385e-06
+8.940421e-06
+7.060129e-06
+5.322418e-06
+0.9994147
+0.0004505964
+8.940421e-06
+7.905719e-06
+8.940421e-06
+0.00015625419
+0.0014905198
+5.322418e-06
+0.0007075034
+7.6220385e-06
+5.322418e-06
+0.9997003
+0.00020371929
+7.060129e-06
+5.322418e-06
+8.940421e-06
+8.940421e-06
+6.243038e-06
+4.325291e-05
+0.99901485
+8.940421e-06
+0.9994137
+7.6220385e-06
+3.5457782e-05
+0.00015625419
+3.5457782e-05
+6.7399155e-06
+5.322418e-06
+8.940421e-06
+4.237742e-05
+7.060129e-06
+0.00020587152
+0.9997141
+0.00015625419
+4.237742e-05
+0.00047204422
+0.9993862
+8.940421e-06
+0.9997141
+3.2162723e-05
+6.243038e-06
+8.940421e-06
+7.6220385e-06
+6.019019e-06
+7.6220385e-06
+6.243038e-06
+0.9997141
+7.060129e-06
+5.322418e-06
+3.923348e-05
+7.905719e-06
+5.322418e-06
+7.905719e-06
+0.9990878
+0.00039074913
+5.322418e-06
+6.243038e-06
+0.00052038184
+7.6220385e-06
+8.940421e-06
+7.905719e-06
+7.060129e-06
+6.243038e-06
+8.940421e-06
+6.019019e-06
+0.99955446
+7.6220385e-06
+6.243038e-06
+0.9994567
+6.243038e-06
+5.322418e-06
+0.9994572
+7.060129e-06
+7.060129e-06
+5.322418e-06
+0.99955446
+6.243038e-06
+7.905719e-06
+7.060129e-06
+7.060129e-06
+0.99955446
+0.00020587152
+6.7399155e-06
+7.6220385e-06
+7.905719e-06
+8.940421e-06
+7.060129e-06
+3.2162723e-05
+0.9994572
+0.99973494
+6.019019e-06
+0.00015625419
+7.6220385e-06
+5.322418e-06
+6.7399155e-06
+6.019019e-06
+5.322418e-06
+0.00022004127
+7.6220385e-06
+3.923348e-05
+6.019019e-06
+7.905719e-06
+0.00014466306
+8.940421e-06
+5.322418e-06
+0.0007075034
+8.940421e-06
+6.019019e-06
+7.6220385e-06
+5.322418e-06
+7.905719e-06
+4.237742e-05
+6.243038e-06
+4.237742e-05
+0.0010494431
+8.940421e-06
+0.0002305175
+7.905719e-06
+0.9994147
+8.940421e-06
+0.9995196
+0.00025665603
+3.2162723e-05
+6.243038e-06
+0.00022004127
+7.6220385e-06
+0.00020587152
+0.00017226019
+3.282719e-05
+0.00014466306
+6.019019e-06
+0.9990878
+0.0001594819
+6.7399155e-06
+0.00014466306
+0.9993678
+3.6372072e-05
+7.060129e-06
+7.060129e-06
+3.2162723e-05
+3.2162723e-05
+0.00023281
+6.7399155e-06
+7.6220385e-06
+4.792357e-05
+6.7399155e-06
+5.322418e-06
+0.00022695896
+0.00022695896
+0.99948114
+8.940421e-06
+7.060129e-06
+0.0001594819
+7.905719e-06
+0.9994147
+4.237742e-05
+3.2162723e-05
+7.6220385e-06
+0.00017670133
+7.060129e-06
+6.019019e-06
+6.019019e-06
+6.7399155e-06
+0.99973494
+6.243038e-06
+0.00017226019
+0.00020587152
+6.019019e-06
+4.671893e-05
+3.2162723e-05
+6.243038e-06
+0.00020587152
+4.792357e-05
+6.7399155e-06
+6.7399155e-06
+5.322418e-06
+0.00015625419
+0.00020587152
+2.9776578e-05
+4.237742e-05
+0.9993381
+3.7123496e-05
+0.0001594819
+0.00019060042
+0.00020587152
+0.00023761873
+0.99973494
+0.00017226019
+3.5457782e-05
+0.00020587152
+0.00017670133
+3.2162723e-05
+3.2162723e-05
+3.6372072e-05
+4.237742e-05
+0.00017226019
+0.00015625419
+0.00022695896
+0.00023281
+0.00021012398
+4.792357e-05
+4.237742e-05
+0.00019060042
+4.891363e-05
+3.5457782e-05
+0.00023281
+4.671893e-05
+0.00017670133
+0.00014466306
+0.00017226019
+0.00020587152
+0.00020587152
+0.00017226019
+6.7399155e-06
+3.2162723e-05
+3.5457782e-05
+3.923348e-05
+4.325291e-05
+4.237742e-05
+0.99824166
+0.00017226019
+3.2162723e-05
+0.00017226019
+2.9776578e-05
+0.00022695896
+4.671893e-05
+0.00017226019
+0.00022695896
+4.325291e-05
+0.00019480144
+3.5457782e-05
+3.5457782e-05
+4.325291e-05
+0.99901485
+3.5457782e-05
+0.00020587152
+3.923348e-05
+5.322418e-06
+4.792357e-05
+0.9993381
+0.00017670133
+0.00020587152
+0.00023761873
+3.282719e-05
+0.00020587152
+0.00016359365
+4.671893e-05
+3.2162723e-05
+0.00020587152
+3.6372072e-05
+5.322418e-06
+0.00019060042
+0.00020587152
+4.671893e-05
+0.99955446
+6.7399155e-06
+0.00020587152
+0.9990164
+0.00015625419
+6.7399155e-06
+0.00019060042
+0.00019060042
+0.0001594819
+0.9987974
+0.00020587152
+4.671893e-05
+4.671893e-05
+0.99995637
+0.00020587152
+0.00015625419
+0.00017226019
+2.9776578e-05
+3.923348e-05
+0.00017226019
+0.0001594819
+0.00017226019
+0.00023281
+3.923348e-05
+3.282719e-05
+0.00022695896
+4.671893e-05
+0.00017226019
+0.00017670133
+4.792357e-05
+0.00015625419
+0.00018035136
+4.325291e-05
+3.5457782e-05
+3.2162723e-05
+0.00017226019
+0.00016359365
+0.00018035136
+0.00015625419
+0.00022695896
+0.00017226019
+3.2162723e-05
+4.792357e-05
+0.00019060042
+3.5457782e-05
+0.00022695896
+2.9776578e-05
+0.00015625419
+0.00020587152
+3.6372072e-05
+0.00020587152
+4.792357e-05
+3.5457782e-05
+4.4368186e-05
+6.019019e-06
+4.325291e-05
+4.792357e-05
+0.0001594819
+0.00020587152
+0.00015625419
+3.3673645e-05
+4.671893e-05
+0.00022695896
+3.2162723e-05
+0.00017226019
+7.905719e-06
+3.5457782e-05
+0.9998155
+3.5457782e-05
+0.00017226019
+0.00015625419
+4.792357e-05
+8.940421e-06
+4.4368186e-05
+0.00017670133
+0.00015625419
+0.00020587152
+3.5457782e-05
+0.00021012398
+4.792357e-05
+3.2162723e-05
+4.671893e-05
+4.237742e-05
+4.671893e-05
+0.9979381
+0.00023281
+0.00025665603
+4.237742e-05
+4.671893e-05
+0.00021012398
+3.2162723e-05
+4.671893e-05
+3.5457782e-05
+4.671893e-05
+3.5457782e-05
+3.2162723e-05
+4.671893e-05
+0.00022695896
+3.5457782e-05
+3.6372072e-05
+0.00020587152
+0.00021012398
+0.9999701
+4.009836e-05
+0.00017670133
+5.2833246e-05
+0.00016359365
+0.00021554108
+0.00021554108
+3.7123496e-05
+0.9979381
+4.792357e-05
+4.009836e-05
+0.9996495
+0.00019480144
+0.9999324
+0.9999671
+5.2833246e-05
+0.9999671
+0.9999671
+0.9999013
+0.00017670133
+0.99897456
+0.00023281
+4.891363e-05
+5.2833246e-05
+0.9998155
+0.9996221
+0.00022695896
+0.00016359365
+5.2833246e-05
+5.2833246e-05
+0.9996495
+0.00017670133
+4.792357e-05
+4.009836e-05
+3.6372072e-05
+0.9999671
+0.00017226019
+0.00025665603
+0.9998288
+4.009836e-05
+0.9999255
+3.7123496e-05
+0.00023761873
+4.891363e-05
+0.00015625419
+0.9999255
+0.00019060042
+0.9979381
+0.00019480144
+0.9999671
+3.3673645e-05
+0.9999671
+4.671893e-05
+0.00019480144
+0.99995637
+5.2833246e-05
+0.00023761873
+4.237742e-05
+5.2833246e-05
+3.7123496e-05
+0.00023281
+0.9998155
+0.00018035136
+0.9987974
+0.00023761873
+0.00020587152
+0.9998155
+3.6372072e-05
+0.9998288
+5.2833246e-05
+4.325291e-05
+4.009836e-05
+5.2833246e-05
+0.99824166
+4.009836e-05
+4.891363e-05
+0.99994016
+0.9979381
+0.9979381
+0.00015625419
+5.2833246e-05
+0.9999255
+0.9979381
+4.792357e-05
+0.99897456
+0.00020587152
+5.2833246e-05
+0.9999671
+0.00022695896
+0.00025665603
+0.9987974
+5.2833246e-05
+4.792357e-05
+4.009836e-05
+4.891363e-05
+0.9996221
+0.00025665603
+5.2833246e-05
+0.00025665603
+0.99897456
+5.2833246e-05
+0.99897456
+0.00023281
+0.9996495
+0.00025665603
+0.00023281
+0.9999671
+0.00019480144
+0.9999255
+0.00017670133
+0.00023281
+0.00018035136
+4.237742e-05
+0.00025665603
+4.891363e-05
+0.00018035136
+5.2833246e-05
+0.9999671
+5.2833246e-05
+0.9999671
+0.00019480144
+4.009836e-05
+0.9999255
+0.00025665603
+0.9987974
+0.00025665603
+0.00018035136
+0.00017670133
+3.7123496e-05
+0.9996495
+4.009836e-05
+0.00021554108
+0.00019060042
+0.99995637
+0.9999709
+0.00019480144
+3.7123496e-05
+4.009836e-05
+3.5457782e-05
+0.9999709
+0.00019480144
+0.00019480144
+0.9999671
+0.9996221
+0.00023281
+0.00017670133
+0.00023281
+3.7123496e-05
+4.237742e-05
+4.009836e-05
+0.00018035136
+0.99995637
+0.00019480144
+0.00017226019
+4.009836e-05
+3.7123496e-05
+3.7123496e-05
+5.2833246e-05
+0.00025665603
+4.792357e-05
+0.9996221
+0.9999255
+0.99897456
+0.00021554108
+3.5457782e-05
+5.2833246e-05
+4.009836e-05
+0.00023281
+3.6372072e-05
+5.2833246e-05
+4.891363e-05
+3.2162723e-05
+3.5457782e-05
+0.99995637
+0.99995637
+0.9996221
+0.99897456
+5.2833246e-05
+0.9998288
+4.009836e-05
+0.99995637
+0.00021554108
+0.99994016
+0.9999105
+5.2833246e-05
+3.923348e-05
+0.99996495
+0.00023281
+0.9999701
+0.9999671
+0.00019480144
+0.9999341
+0.9999341
+0.9987974
+0.9999709
+0.9999255
+0.00016359365
+0.9998617
+0.9999701
+0.9999341
+0.9999701
+0.9999709
+0.9999701
+0.9999324
+0.9979381
+0.9999709
+0.9999324
+0.9999671
+0.9999013
+4.009836e-05
+0.9998288
+0.9979381
+0.9999709
+0.00025665603
+0.99824166
+3.6372072e-05
+5.2833246e-05
+0.9999341
+0.9999701
+0.9999709
+0.9999709
+0.00015625419
+0.99995637
+0.9999614
+3.6372072e-05
+0.00019480144
+0.9999255
+0.9999709
+0.9999709
+0.9999701
+0.99994016
+0.99997354
+0.00023761873
+0.99995637
+0.99996495
+0.9999324
+0.00017670133
+0.00019480144
+0.00017670133
+0.009167032
+0.9999341
+5.2833246e-05
+0.9999126
+4.009836e-05
+0.9999604
+0.9999341
+0.9999341
+0.9999126
+0.9999709
+0.9999341
+0.9999126
+0.00019480144
+0.9999671
+0.9999671
+0.9999324
+0.9999126
+0.9999709
+0.9999604
+0.9999341
+0.99996495
+0.99994016
+0.9999255
+0.9999604
+0.9999341
+0.9999255
+0.9999341
+0.99997354
+0.9999701
+0.9999324
+0.9999207
+0.99997354
+0.99994016
+0.9999126
+0.9999324
+0.9999709
+0.9999207
+0.99994016
+0.00037019775
+0.9999207
+0.99996495
+0.99997354
+0.9999671
+0.9999207
+0.99996495
+0.0013293574
+0.99994016
+0.9999324
+0.99996495
+0.9999604
+0.9999105
+0.9999701
+0.9999324
+0.9999701
+0.9999341
+0.9999324
+0.99997354
+0.9999126
+0.99997354
+0.9999207
+0.9999207
+0.9999341
+0.99995637
+0.9999709
+0.9999701
+0.99997354
+0.99997354
+0.99997354
+0.9999604
+0.9999709
+0.9999255
+0.9999341
+0.9999126
+0.9999105
+0.9999701
+0.0008625914
+0.99997354
+0.99997354
+0.99995637
+0.9999341
+0.9999255
+0.9999341
+0.9999324
+0.99994016
+0.9999013
+0.9999207
+0.9999709
+0.9999701
+0.9999324
+0.9992411
+0.99997354
+0.9999013
+0.9999324
+0.9999324
+0.9999701
+0.9999341
+0.9999324
+0.9999105
+0.9999701
+0.9999709
+0.9999207
+0.9999709
+0.9999126
+0.99994016
+0.99982506
+0.9999341
+0.00046149982
+0.9999639
+0.99996495
+0.99996495
+0.9996221
+0.9999255
+0.99997354
+0.99996495
+0.9999255
+0.9999105
+0.00078249123
+0.9999604
+0.99994016
+0.9999709
+0.00025665603
+0.99994016
+0.99489474
+0.9998155
+0.9999255
+0.9999324
+0.9999614
+0.9999701
+0.9999671
+0.9999324
+0.9999671
+0.00039583017
+0.9999614
+0.9999709
+0.9999614
+0.9999709
+0.9999701
+0.9999701
+0.9999341
+0.9999207
+0.9999341
+0.9999709
+0.00039583017
+0.9999207
+0.9999701
+0.99995637
+0.99982506
+0.9996221
+0.9999207
+0.9999671
+0.9999341
+0.9999126
+0.9999255
+0.9999324
+0.9999255
+0.99985075
+0.9999614
+0.0009514644
+0.99994016
+0.9999671
+0.9992411
+0.009360342
+0.9999105
+0.9999207
+0.99994016
+0.0004272755
+0.9998312
+0.99980205
+0.99982506
+0.99980205
+0.0007991346
+0.9999255
+0.0004272755
+0.9999324
+0.0006919931
+0.00078249123
+0.9999207
+0.9990392
+0.0012328194
+0.0007991346
+0.9990392
+0.9999614
+0.99997354
+0.9999299
+0.98975986
+0.00088093686
+0.00088093686
+0.99998844
+0.00043636683
+0.0006919931
+0.99996495
+0.009360342
+0.9971035
+0.99997354
+0.9999701
+0.99980205
+0.99489474
+0.99927515
+0.9943492
+0.9991503
+0.99927515
+0.9998617
+0.9999341
+0.9990822
+0.9991503
+0.00084514386
+0.0007474052
+0.9991503
+0.004096335
+0.9999671
+0.99527174
+0.9999639
+0.9990392
+0.9997862
+0.99996495
+0.99051267
+0.013955284
+0.008114705
+0.9890587
+0.00076283637
+0.00093165156
+0.008114705
+0.00039583017
+0.99994016
+0.99527174
+0.00078249123
+0.99918026
+0.9999832
+0.99998736
+0.00040811044
+0.99927515
+0.99932885
+0.99997354
+0.9999639
+0.00047131904
+0.9999701
+0.9998312
+0.00086311874
+0.9991503
+0.99051243
+0.98975986
+0.9990392
+0.9992411
+0.99980205
+0.9998617
+0.001503084
+0.0047280774
+0.999936
+0.99997354
+0.0008239167
+0.98955053
+0.99980205
+0.00040811044
+0.9999832
+0.9990392
+0.0006919931
+0.99998736
+0.9999832
+0.99998736
+0.008151155
+0.98955053
+0.9999341
+0.9999013
+0.99998736
+0.9999639
+0.99997354
+0.99980205
+0.9998617
+0.0009514644
+0.9998617
+0.99997354
+0.99998736
+0.99918026
+0.00040811044
+0.99982506
+0.9998437
+0.9943492
+0.9991503
+0.00046149982
+0.9990392
+0.009360342
+0.016082935
+0.99998736
+0.9999299
+0.9998312
+0.00093165156
+0.0003778439
+0.9991503
+0.9999639
+0.9991503
+0.009167032
+0.0007474052
+0.9990822
+0.0007991346
+0.99918026
+0.99478984
+0.98955053
+0.99982506
+0.001503084
+0.99998736
+0.0011414601
+0.9967257
+0.99997354
+0.99998736
+0.99998736
+0.99997354
+0.9998617
+0.99051243
+0.9999832
+0.0013293574
+0.0011414601
+0.9999207
+0.0013939476
+0.00039583017
+0.98955053
+0.99478984
+0.99985075
+0.9991503
+0.99998736
+0.98955053
+0.9992411
+0.00034274196
+0.99994016
+0.999811
+0.99478984
+0.99437463
+0.99998844
+0.9998312
+0.00093165156
+0.98975986
+0.001503084
+0.99997354
+0.9999324
+0.99998736
+0.9999614
+0.9990392
+0.0013293574
+0.00086311874
+0.99996495
+0.9999207
+0.9991503
+0.9999126
+0.99527174
+0.0013293574
+0.99994016
+0.999936
+0.99996805
+0.9999708
+0.9999877
+0.9999832
+0.99996364
+0.9999888
+0.99998605
+0.99998367
+0.9999877
+0.99996483
+0.9999888
+0.9999678
+0.9999852
+0.999967
+0.9999434
+0.9999678
+0.99996483
+0.99998605
+0.9999708
+0.99996483
+0.9999639
+0.9999888
+0.99998736
+0.99998724
+0.9999678
+0.99996364
+0.9999815
+0.99996483
+0.999938
+0.99996805
+0.9999851
+0.9999331
+0.99992275
+0.999938
+0.9999602
+0.99998605
+0.99998975
+0.9999678
+0.99996483
+0.9999877
+0.9999639
+0.9999888
+0.99998605
+0.99998975
+0.99998605
+0.9999685
+0.9999815
+0.9999864
+0.9999864
+0.9999888
+0.9999888
+0.99996483
+0.99998605
+0.99992275
+0.99998736
+0.99998724
+0.9999864
+0.999967
+0.99998605
+0.99998903
+0.99998724
+0.99996364
+0.9999708
+0.9999888
+0.9999708
+0.999984
+0.9999708
+0.9999602
+0.99996805
+0.99998605
+0.99998844
+0.9999888
+0.9999877
+0.99998605
+0.99998724
+0.9999851
+0.99993765
+0.9999851
+0.99998903
+0.999967
+6.9338246e-05
+0.9999831
+0.9999877
+0.99996483
+0.99996483
+1.618272e-05
+0.9999815
+0.9999639
+0.9999708
+0.999967
+0.99998474
+0.9999877
+0.99996805
+0.9999434
+0.99998724
+0.9999602
+0.9999888
+0.9999708
+0.9999851
+0.99996805
+0.99998367
+0.9999877
+0.99998367
+0.9999434
+0.9999708
+0.99996483
+0.99998605
+0.99992275
+0.9999434
+0.9999685
+5.9588056e-05
+0.999938
+0.9999815
+0.999967
+0.9999678
+0.99996483
+0.99996877
+0.9999852
+0.9999602
+0.99998903
+0.99992275
+0.9999714
+0.99992275
+0.99998546
+0.9999317
+0.99996483
+0.9999317
+0.99998367
+0.9999602
+0.9999888
+0.9999888
+0.9999888
+0.99996483
+0.99998724
+0.00013585434
+0.9999317
+0.9999299
+0.9999678
+0.999938
+0.9999831
+0.9999685
+0.9999317
+0.9999864
+0.99998605
+0.99998367
+0.9999708
+0.9999602
+0.99998605
+0.9999851
+0.9999602
+0.9999877
+0.99998736
+0.99998736
+0.99998903
+0.99998367
+0.0001542339
+0.9999678
+0.99996364
+0.9999678
+0.99996483
+3.2848795e-05
+0.9999815
+0.9999602
+0.9999888
+0.99999
+0.9999852
+0.9999639
+0.9999877
+0.99996805
+0.9999602
+0.9999888
+0.9999602
+0.9999888
+0.99998546
+0.00017812874
+0.9999888
+0.99998975
+0.99996364
+0.9999602
+0.9999815
+0.9999888
+0.9999888
+0.99998975
+0.9999393
+0.9999877
+0.99996483
+0.9999602
+5.9588056e-05
+0.00083521125
+3.2848795e-05
+0.99998367
+0.99996555
+0.00035159392
+0.9999852
+0.99998903
+0.9999602
+0.999984
+0.99998796
+0.9999877
+0.9999678
+0.0015203392
+0.99996555
+0.9999602
+0.99998796
+0.99998844
+0.00017812874
+0.99998903
+0.99998903
+0.99998796
+0.99994457
+0.9999678
+3.793864e-05
+3.0411753e-05
+0.99996805
+0.004148995
+0.99998903
+0.9999815
+5.9588056e-05
+5.1143885e-05
+0.9999852
+0.99998796
+3.689701e-05
+0.99999
+0.00013585434
+0.0007576517
+0.99998534
+0.99996555
+0.9999393
+0.99993896
+0.9999639
+0.00032551744
+0.99998903
+0.99996555
+0.99996555
+0.99996877
+0.99996877
+0.0001542339
+0.99998903
+0.99994457
+0.99999
+0.99998367
+0.9999815
+0.9999393
+0.0001542339
+0.9999331
+0.9999602
+6.9338246e-05
+0.99996805
+0.99999
+3.689701e-05
+0.9999888
+1.618272e-05
+0.99998903
+0.00035159392
+0.99998736
+0.9999851
+0.99998796
+1.8690242e-05
+0.99998903
+0.9999685
+0.99998903
+0.00016491521
+0.9988481
+1.8690242e-05
+1.8300698e-05
+0.99996483
+0.99996555
+0.00013585434
+0.99998903
+0.99996555
+0.999984
+3.0411753e-05
+0.99993765
+0.99998796
+3.793864e-05
+0.99993896
+0.99998796
+0.99996877
+0.99998796
+0.99998796
+0.0001542339
+3.2848795e-05
+0.99996877
+0.999984
+7.4894415e-05
+0.99992275
+0.00017812874
+0.99996805
+0.9999888
+0.0007576517
+0.99996555
+1.8690242e-05
+0.9985933
+0.99996877
+3.793864e-05
+0.00013585434
+6.8820795e-05
+0.99996877
+0.99996877
+0.00017812874
+0.99998677
+1.8300698e-05
+0.99998546
+0.99998903
+0.99998677
+0.9999331
+0.9999331
+0.9999331
+0.9988721
+0.9917278
+0.9999393
+0.9999864
+0.99996805
+0.99998534
+0.0001542339
+0.9999393
+0.99998903
+0.99996877
+0.00035159392
+0.99998546
+0.9999815
+1.618272e-05
+0.99996555
+5.223249e-05
+0.00014279263
+0.99998903
+0.99998796
+0.0023245455
+0.99996555
+0.99998903
+0.9999331
+3.793864e-05
+0.00035159392
+0.99996555
+3.793864e-05
+0.9999331
+0.9912554
+0.00017812874
+0.9999331
+0.00013585434
+0.99996483
+0.99998796
+0.99998796
+0.99996877
+6.8820795e-05
+0.9999714
+1.8300698e-05
+0.00014279263
+0.9999888
+0.99996877
+0.9999685
+0.99998724
+3.5123998e-05
+6.9338246e-05
+3.689701e-05
+0.004572132
+0.99993896
+0.9999714
+0.9999393
+0.99998796
+0.0036705781
+0.9912554
+0.99998903
+0.99996555
+0.004045122
+1.8690242e-05
+0.00032551744
+0.999984
+0.9999685
+0.99998546
+7.4894415e-05
+0.00032551744
+0.00017812874
+3.793864e-05
+0.99999
+0.99998796
+0.00010311027
+0.9999602
+0.99998903
+0.99998975
+3.5123998e-05
+0.99996555
+1.8300698e-05
+3.2848795e-05
+0.99878174
+0.00013585434
+0.00013585434
+0.00016491521
+1.8300698e-05
+0.99996877
+0.00013585434
+0.99996877
+0.0001542339
+0.99996555
+1.618272e-05
+0.9999685
+0.0001542339
+0.99998605
+0.99998534
+0.999984
+0.0016758427
+0.99998546
+0.99996364
+0.99998534
+1.8690242e-05
+0.99998546
+0.9999685
+0.0009444215
+0.9999299
+0.004045122
+6.9338246e-05
+1.8690242e-05
+0.00035159392
+0.99996877
+5.9588056e-05
+6.8820795e-05
+0.99998534
+3.2848795e-05
+0.0017189811
+1.8690242e-05
+0.99999
+0.9999678
+0.99993896
+0.00010311027
+0.99996555
+0.9999888
+3.2848795e-05
+0.00083521125
+0.9999685
+0.00013585434
+0.999984
+0.99998903
+6.8820795e-05
+6.8820795e-05
+0.00032551744
+0.9999714
+0.00035159392
+0.00016491521
+0.00016491521
+3.793864e-05
+0.99998546
+1.8690242e-05
+0.99996877
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/ml/mnist_tf_model/saved_model.pb
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/ml/mnist_tf_model/saved_model.pb b/examples/src/main/resources/ml/mnist_tf_model/saved_model.pb
deleted file mode 100644
index 4d36671..0000000
Binary files a/examples/src/main/resources/ml/mnist_tf_model/saved_model.pb and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/ml/mnist_tf_model/variables/variables.data-00000-of-00001
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/ml/mnist_tf_model/variables/variables.data-00000-of-00001 b/examples/src/main/resources/ml/mnist_tf_model/variables/variables.data-00000-of-00001
deleted file mode 100644
index a65398f..0000000
Binary files a/examples/src/main/resources/ml/mnist_tf_model/variables/variables.data-00000-of-00001 and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/ml/mnist_tf_model/variables/variables.index
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/ml/mnist_tf_model/variables/variables.index b/examples/src/main/resources/ml/mnist_tf_model/variables/variables.index
deleted file mode 100644
index 221dd2d..0000000
Binary files a/examples/src/main/resources/ml/mnist_tf_model/variables/variables.index and /dev/null differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/models/mnist_tf_model/saved_model.pb
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/models/mnist_tf_model/saved_model.pb b/examples/src/main/resources/models/mnist_tf_model/saved_model.pb
new file mode 100644
index 0000000..4d36671
Binary files /dev/null and b/examples/src/main/resources/models/mnist_tf_model/saved_model.pb differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001 b/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001
new file mode 100644
index 0000000..a65398f
Binary files /dev/null and b/examples/src/main/resources/models/mnist_tf_model/variables/variables.data-00000-of-00001 differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/models/mnist_tf_model/variables/variables.index
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/models/mnist_tf_model/variables/variables.index b/examples/src/main/resources/models/mnist_tf_model/variables/variables.index
new file mode 100644
index 0000000..221dd2d
Binary files /dev/null and b/examples/src/main/resources/models/mnist_tf_model/variables/variables.index differ

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/examples/src/main/resources/models/xgboost/agaricus-model.txt
----------------------------------------------------------------------
diff --git a/examples/src/main/resources/models/xgboost/agaricus-model.txt b/examples/src/main/resources/models/xgboost/agaricus-model.txt
new file mode 100644
index 0000000..4bf76d6
--- /dev/null
+++ b/examples/src/main/resources/models/xgboost/agaricus-model.txt
@@ -0,0 +1,714 @@
+booster[0]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f56<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f60<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f23<-9.53674e-07] yes=13,no=14,missing=13
+				13:[f24<-9.53674e-07] yes=19,no=20,missing=19
+					19:leaf=1.99735
+					20:leaf=-1.8
+				14:leaf=-1.80952
+			8:leaf=-1.95062
+		4:[f21<-9.53674e-07] yes=9,no=10,missing=9
+			9:leaf=1.77778
+			10:leaf=-1.98104
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f67<-9.53674e-07] yes=11,no=12,missing=11
+			11:[f8<-9.53674e-07] yes=15,no=16,missing=15
+				15:leaf=-1.99117
+				16:leaf=1
+			12:[f39<-9.53674e-07] yes=17,no=18,missing=17
+				17:leaf=1.77143
+				18:leaf=-1.5
+		6:leaf=1.85965
+booster[1]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=1.13207
+		4:[f27<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f30<-9.53674e-07] yes=11,no=12,missing=11
+				11:leaf=-1.12641
+				12:leaf=1.08392
+			8:leaf=1.09118
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f67<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f39<-9.53674e-07] yes=13,no=14,missing=13
+				13:[f21<-9.53674e-07] yes=17,no=18,missing=17
+					17:leaf=-1.06692
+					18:leaf=2.08
+				14:leaf=-1.13236
+			10:[f39<-9.53674e-07] yes=15,no=16,missing=15
+				15:leaf=0.928896
+				16:leaf=-0.784694
+		6:leaf=0.994744
+booster[2]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=1.03409
+		4:[f27<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f30<-9.53674e-07] yes=11,no=12,missing=11
+				11:leaf=-1.00925
+				12:leaf=0.934041
+			8:leaf=0.947964
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f39<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f112<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=-0.862367
+				14:[f79<-9.53674e-07] yes=15,no=16,missing=15
+					15:leaf=0.996309
+					16:leaf=-0.217869
+			10:leaf=-1.03467
+		6:leaf=0.773973
+booster[3]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f56<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f60<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f36<-9.53674e-07] yes=11,no=12,missing=11
+				11:[f21<-9.53674e-07] yes=15,no=16,missing=15
+					15:leaf=0.535599
+					16:leaf=-0.591832
+				12:leaf=0.99398
+			8:leaf=-0.731796
+		4:leaf=-0.74401
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f67<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f115<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=-0.991027
+				14:[f86<-9.53674e-07] yes=17,no=18,missing=17
+					17:leaf=-0.71378
+					18:leaf=-0.010833
+			10:leaf=0.382551
+		6:leaf=0.587063
+booster[4]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.949695
+		4:[f27<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f30<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=-0.846263
+				14:leaf=0.571051
+			8:leaf=0.604424
+	2:[f39<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f7<-9.53674e-07] yes=9,no=10,missing=9
+			9:leaf=0.359876
+			10:leaf=-0.0906721
+		6:[f1<-9.53674e-07] yes=11,no=12,missing=11
+			11:leaf=-0.902494
+			12:leaf=-0.222349
+booster[5]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.866121
+		4:[f56<-9.53674e-07] yes=7,no=8,missing=7
+			7:[f10<-9.53674e-07] yes=11,no=12,missing=11
+				11:leaf=-0.172918
+				12:leaf=0.444059
+			8:leaf=-0.581706
+	2:[f109<-9.53674e-07] yes=5,no=6,missing=5
+		5:[f39<-9.53674e-07] yes=9,no=10,missing=9
+			9:[f65<-9.53674e-07] yes=13,no=14,missing=13
+				13:leaf=0.314289
+				14:leaf=-0.137217
+			10:leaf=-0.87866
+		6:leaf=0.593857
+booster[6]:
+0:[f64<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f39<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f21<-9.53674e-07] yes=5,no=6,missing=5
+			5:leaf=-0.16553
+			6:leaf=0.424994
+		4:[f118<-9.53674e-07] yes=7,no=8,missing=7
+			7:leaf=-0.662592
+			8:leaf=0.10184
+	2:leaf=0.647963
+booster[7]:
+0:[f27<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f39<-9.53674e-07] yes=3,no=4,missing=3
+		3:[f112<-9.53674e-07] yes=5,no=6,missing=5
+			5:leaf=-0.205397
+			6:[f55<-9.53674e-07] yes=9,no=10,missing=9
+				9:leaf=0.531323
+				10:leaf=0.0411505
+		4:[f95<-9.53674e-07] yes=7,no=8,missing=7
+			7:leaf=0.0893909
+			8:leaf=-0.688257
+	2:leaf=0.62192
+booster[8]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.559472
+		4:leaf=0.047577
+	2:[f21<-9.53674e-07] yes=5,no=6,missing=5
+		5:leaf=-0.522063
+		6:leaf=0.185313
+booster[9]:
+0:[f106<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f36<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.106198
+		4:[f29<-9.53674e-07] yes=5,no=6,missing=5
+			5:leaf=0.451254
+			6:leaf=0.0100806
+	2:leaf=-0.265738
+booster[10]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f118<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.411374
+		4:leaf=-0.00392402
+	2:[f118<-9.53674e-07] yes=5,no=6,missing=5
+		5:leaf=-0.370329
+		6:leaf=0.106229
+booster[11]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.244834
+		4:leaf=0.393425
+	2:leaf=-0.191846
+booster[12]:
+0:[f65<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.281915
+	2:[f126<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.0457934
+		4:leaf=-0.335547
+booster[13]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:[f55<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=0.298848
+		4:leaf=-0.0234579
+	2:leaf=-0.211675
+booster[14]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.180838
+	2:[f21<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.28038
+		4:leaf=0.0867539
+booster[15]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.123414
+	2:leaf=-0.136942
+booster[16]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.154724
+	2:[f118<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.17891
+		4:leaf=0.28564
+booster[17]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.1202
+	2:leaf=-0.113537
+booster[18]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0946849
+	2:leaf=0.147314
+booster[19]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.128399
+	2:leaf=0.117783
+booster[20]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.135164
+	2:[f55<-9.53674e-07] yes=3,no=4,missing=3
+		3:leaf=-0.042949
+		4:leaf=0.173579
+booster[21]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0957448
+	2:leaf=-0.104156
+booster[22]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0925588
+	2:leaf=-0.0798059
+booster[23]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0830908
+	2:leaf=0.126943
+booster[24]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0823832
+	2:leaf=-0.0899369
+booster[25]:
+0:[f3<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0589036
+	2:leaf=-0.0851568
+booster[26]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0859156
+	2:leaf=-0.0815898
+booster[27]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0637587
+	2:leaf=-0.048542
+booster[28]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.069489
+	2:leaf=0.058072
+booster[29]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.149849
+	2:leaf=0.0984096
+booster[30]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0688469
+	2:leaf=0.0689056
+booster[31]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.071993
+	2:leaf=0.0544265
+booster[32]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0686437
+	2:leaf=-0.061108
+booster[33]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0522195
+	2:leaf=-0.0544709
+booster[34]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0445775
+	2:leaf=-0.0612543
+booster[35]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0370941
+	2:leaf=0.0414116
+booster[36]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0491957
+	2:leaf=-0.0374184
+booster[37]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0428276
+	2:leaf=0.0362258
+booster[38]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.038428
+	2:leaf=-0.0331781
+booster[39]:
+0:[f36<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.14093
+	2:leaf=0.101744
+booster[40]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0443167
+	2:leaf=-0.0668384
+booster[41]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0654174
+	2:leaf=0.0401212
+booster[42]:
+0:[f118<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0426251
+	2:leaf=-0.0430745
+booster[43]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0315924
+	2:leaf=0.0413181
+booster[44]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.037716
+	2:leaf=0.0316046
+booster[45]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0384603
+	2:leaf=-0.031591
+booster[46]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0264121
+	2:leaf=0.0318885
+booster[47]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0258388
+	2:leaf=-0.0263959
+booster[48]:
+0:[f118<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0220629
+	2:leaf=-0.0169775
+booster[49]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0254499
+	2:leaf=0.0207041
+booster[50]:
+0:[f126<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.022765
+	2:leaf=-0.0334065
+booster[51]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.022757
+	2:leaf=-0.0227902
+booster[52]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0265489
+	2:leaf=-0.0199871
+booster[53]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0149867
+	2:leaf=0.022471
+booster[54]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0175078
+	2:leaf=0.0157137
+booster[55]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0182503
+	2:leaf=-0.0143524
+booster[56]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0115217
+	2:leaf=0.0166359
+booster[57]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0134613
+	2:leaf=-0.0116378
+booster[58]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00981541
+	2:leaf=0.0115454
+booster[59]:
+0:[f55<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0116732
+	2:leaf=0.00925633
+booster[60]:
+0:[f4<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00879889
+	2:leaf=-0.0122642
+booster[61]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0105853
+	2:leaf=-0.00918858
+booster[62]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00988643
+	2:leaf=0.0133116
+booster[63]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00922858
+	2:leaf=-0.00796718
+booster[64]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00674803
+	2:leaf=0.00923198
+booster[65]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00946677
+	2:leaf=-0.00611888
+booster[66]:
+0:[f21<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00809434
+	2:leaf=-0.00524561
+booster[67]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0058383
+	2:leaf=-0.0047337
+booster[68]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00516364
+	2:leaf=0.00612514
+booster[69]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00393965
+	2:leaf=0.0055112
+booster[70]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0062736
+	2:leaf=-0.00406246
+booster[71]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00387397
+	2:leaf=-0.00335857
+booster[72]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00378672
+	2:leaf=-0.00363264
+booster[73]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00348857
+	2:leaf=0.00454308
+booster[74]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00310136
+	2:leaf=-0.00269635
+booster[75]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00232427
+	2:leaf=0.00316355
+booster[76]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0033131
+	2:leaf=-0.00214357
+booster[77]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.00198535
+	2:leaf=0.00270199
+booster[78]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00189522
+	2:leaf=-0.00163941
+booster[79]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0018533
+	2:leaf=0.00251417
+booster[80]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00213544
+	2:leaf=-0.00134465
+booster[81]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.0010731
+	2:leaf=0.0017787
+booster[82]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.00170681
+	2:leaf=-0.00144721
+booster[83]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000965197
+	2:leaf=0.00137187
+booster[84]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.0014236
+	2:leaf=-0.000908222
+booster[85]:
+0:[f9<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000799637
+	2:leaf=0.00110198
+booster[86]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000950752
+	2:leaf=-0.000839873
+booster[87]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000841428
+	2:leaf=0.0011364
+booster[88]:
+0:[f29<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000900093
+	2:leaf=-0.00055321
+booster[89]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000479465
+	2:leaf=0.000775463
+booster[90]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000824745
+	2:leaf=-0.000703525
+booster[91]:
+0:[f112<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=-0.000446206
+	2:leaf=0.000627391
+booster[92]:
+0:[f51<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000531432
+	2:leaf=-0.000464763
+booster[93]:
+0:[f39<-9.53674e-07] yes=1,no=2,missing=1
+	1:leaf=0.000457717
+	2:leaf=-0.000483533
+booster[94]:
+0:leaf=-8.69481e-06
+booster[95]:
+0:leaf=-2.22842e-06
+booster[96]:
+0:leaf=-7.41984e-07
+booster[97]:
+0:leaf=6.03395e-07
+booster[98]:
+0:leaf=-2.45552e-08
+booster[99]:
+0:leaf=-2.45552e-08
+booster[100]:
+0:leaf=-2.45552e-08
+booster[101]:
+0:leaf=-2.45552e-08
+booster[102]:
+0:leaf=-2.45552e-08
+booster[103]:
+0:leaf=-2.45552e-08
+booster[104]:
+0:leaf=-2.45552e-08
+booster[105]:
+0:leaf=-2.45552e-08
+booster[106]:
+0:leaf=-2.45552e-08
+booster[107]:
+0:leaf=-2.45552e-08
+booster[108]:
+0:leaf=-2.45552e-08
+booster[109]:
+0:leaf=-2.45552e-08
+booster[110]:
+0:leaf=-2.45552e-08
+booster[111]:
+0:leaf=-2.45552e-08
+booster[112]:
+0:leaf=-2.45552e-08
+booster[113]:
+0:leaf=-2.45552e-08
+booster[114]:
+0:leaf=-2.45552e-08
+booster[115]:
+0:leaf=-2.45552e-08
+booster[116]:
+0:leaf=-2.45552e-08
+booster[117]:
+0:leaf=-2.45552e-08
+booster[118]:
+0:leaf=-2.45552e-08
+booster[119]:
+0:leaf=-2.45552e-08
+booster[120]:
+0:leaf=-2.45552e-08
+booster[121]:
+0:leaf=-2.45552e-08
+booster[122]:
+0:leaf=-2.45552e-08
+booster[123]:
+0:leaf=-2.45552e-08
+booster[124]:
+0:leaf=-2.45552e-08
+booster[125]:
+0:leaf=-2.45552e-08
+booster[126]:
+0:leaf=-2.45552e-08
+booster[127]:
+0:leaf=-2.45552e-08
+booster[128]:
+0:leaf=-2.45552e-08
+booster[129]:
+0:leaf=-2.45552e-08
+booster[130]:
+0:leaf=-2.45552e-08
+booster[131]:
+0:leaf=-2.45552e-08
+booster[132]:
+0:leaf=-2.45552e-08
+booster[133]:
+0:leaf=-2.45552e-08
+booster[134]:
+0:leaf=-2.45552e-08
+booster[135]:
+0:leaf=-2.45552e-08
+booster[136]:
+0:leaf=-2.45552e-08
+booster[137]:
+0:leaf=-2.45552e-08
+booster[138]:
+0:leaf=-2.45552e-08
+booster[139]:
+0:leaf=-2.45552e-08
+booster[140]:
+0:leaf=-2.45552e-08
+booster[141]:
+0:leaf=-2.45552e-08
+booster[142]:
+0:leaf=-2.45552e-08
+booster[143]:
+0:leaf=-2.45552e-08
+booster[144]:
+0:leaf=-2.45552e-08
+booster[145]:
+0:leaf=-2.45552e-08
+booster[146]:
+0:leaf=-2.45552e-08
+booster[147]:
+0:leaf=-2.45552e-08
+booster[148]:
+0:leaf=-2.45552e-08
+booster[149]:
+0:leaf=-2.45552e-08
+booster[150]:
+0:leaf=-2.45552e-08
+booster[151]:
+0:leaf=-2.45552e-08
+booster[152]:
+0:leaf=-2.45552e-08
+booster[153]:
+0:leaf=-2.45552e-08
+booster[154]:
+0:leaf=-2.45552e-08
+booster[155]:
+0:leaf=-2.45552e-08
+booster[156]:
+0:leaf=-2.45552e-08
+booster[157]:
+0:leaf=-2.45552e-08
+booster[158]:
+0:leaf=-2.45552e-08
+booster[159]:
+0:leaf=-2.45552e-08
+booster[160]:
+0:leaf=-2.45552e-08
+booster[161]:
+0:leaf=-2.45552e-08
+booster[162]:
+0:leaf=-2.45552e-08
+booster[163]:
+0:leaf=-2.45552e-08
+booster[164]:
+0:leaf=-2.45552e-08
+booster[165]:
+0:leaf=-2.45552e-08
+booster[166]:
+0:leaf=-2.45552e-08
+booster[167]:
+0:leaf=-2.45552e-08
+booster[168]:
+0:leaf=-2.45552e-08
+booster[169]:
+0:leaf=-2.45552e-08
+booster[170]:
+0:leaf=-2.45552e-08
+booster[171]:
+0:leaf=-2.45552e-08
+booster[172]:
+0:leaf=-2.45552e-08
+booster[173]:
+0:leaf=-2.45552e-08
+booster[174]:
+0:leaf=-2.45552e-08
+booster[175]:
+0:leaf=-2.45552e-08
+booster[176]:
+0:leaf=-2.45552e-08
+booster[177]:
+0:leaf=-2.45552e-08
+booster[178]:
+0:leaf=-2.45552e-08
+booster[179]:
+0:leaf=-2.45552e-08
+booster[180]:
+0:leaf=-2.45552e-08
+booster[181]:
+0:leaf=-2.45552e-08
+booster[182]:
+0:leaf=-2.45552e-08
+booster[183]:
+0:leaf=-2.45552e-08
+booster[184]:
+0:leaf=-2.45552e-08
+booster[185]:
+0:leaf=-2.45552e-08
+booster[186]:
+0:leaf=-2.45552e-08
+booster[187]:
+0:leaf=-2.45552e-08
+booster[188]:
+0:leaf=-2.45552e-08
+booster[189]:
+0:leaf=-2.45552e-08
+booster[190]:
+0:leaf=-2.45552e-08
+booster[191]:
+0:leaf=-2.45552e-08
+booster[192]:
+0:leaf=-2.45552e-08
+booster[193]:
+0:leaf=-2.45552e-08
+booster[194]:
+0:leaf=-2.45552e-08
+booster[195]:
+0:leaf=-2.45552e-08
+booster[196]:
+0:leaf=-2.45552e-08
+booster[197]:
+0:leaf=-2.45552e-08
+booster[198]:
+0:leaf=-2.45552e-08
+booster[199]:
+0:leaf=-2.45552e-08
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilder.java
----------------------------------------------------------------------
diff --git a/modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilder.java b/modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilder.java
index 7a176e0..2c6d917 100644
--- a/modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilder.java
+++ b/modules/ml/src/main/java/org/apache/ignite/ml/inference/builder/IgniteDistributedInfModelBuilder.java
@@ -176,17 +176,18 @@ public class IgniteDistributedInfModelBuilder implements AsyncInfModelBuilder {
             if (!running.get())
                 throw new IllegalStateException("Inference model is not running");
 
-            reqQueue.put(input);
+            CompletableFuture<O> fut = new CompletableFuture<>();
 
             try {
-                CompletableFuture<O> fut = new CompletableFuture<>();
                 futures.put(fut);
-                return fut;
             }
             catch (InterruptedException e) {
                 close(); // In case of exception in the above code the model state becomes invalid and model is closed.
                 throw new RuntimeException(e);
             }
+
+            reqQueue.put(input);
+            return fut;
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/pom.xml
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/pom.xml b/modules/ml/xgboost-model-parser/pom.xml
new file mode 100644
index 0000000..d70ae0b
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!--
+    POM file.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <properties>
+        <antlr.version>4.7.1</antlr.version>
+    </properties>
+
+    <parent>
+        <artifactId>ignite-parent</artifactId>
+        <groupId>org.apache.ignite</groupId>
+        <version>1</version>
+        <relativePath>../../../parent</relativePath>
+    </parent>
+
+    <artifactId>ignite-ml-xgboost-model-parser</artifactId>
+    <version>2.7.0-SNAPSHOT</version>
+    <url>http://ignite.apache.org</url>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.ignite</groupId>
+            <artifactId>ignite-ml</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.antlr</groupId>
+            <artifactId>antlr4-runtime</artifactId>
+            <version>${antlr.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/MapBasedXGObject.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/MapBasedXGObject.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/MapBasedXGObject.java
new file mode 100644
index 0000000..20bdf1f
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/MapBasedXGObject.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** Map based implementation of {@link XGObject}. */
+public class MapBasedXGObject implements XGObject {
+    /** */
+    private static final long serialVersionUID = 4378979710350902592L;
+
+    /** Key-value map. */
+    private final Map<String, Double> map;
+
+    /**
+     * Constructs a new instance of map based {@link XGObject} with empty map.
+     */
+    public MapBasedXGObject() {
+        this(new HashMap<>());
+    }
+
+    /**
+     * Constructs a new instance of map based {@link XGObject} with the specified map.
+     *
+     * @param map Map.
+     */
+    public MapBasedXGObject(Map<String, Double> map) {
+        this.map = map;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Double getFeature(String featureName) {
+        return map.get(featureName);
+    }
+
+    /**
+     * Puts feature value with the specified feature name.
+     *
+     * @param featureName Feature name.
+     * @param val Feature value.
+     */
+    public void put(String featureName, Double val) {
+        map.put(featureName, val);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGLeafNode.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGLeafNode.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGLeafNode.java
new file mode 100644
index 0000000..da572db
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGLeafNode.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+/** XGBoost model leaf node. */
+public class XGLeafNode implements XGNode {
+    /** Value. */
+    private final double val;
+
+    /**
+     * Constructs a new instance of leaf node.
+     *
+     * @param val Value.
+     */
+    public XGLeafNode(double val) {
+        this.val = val;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double predict(XGObject obj) {
+        return val;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGModel.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGModel.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGModel.java
new file mode 100644
index 0000000..3ca9d54
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGModel.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+import java.util.List;
+import org.apache.ignite.ml.inference.InfModel;
+
+/**
+ * XGBoost model.
+ */
+public class XGModel implements InfModel<XGObject, Double> {
+    /** List of decision trees. */
+    private final List<XGNode> trees;
+
+    /**
+     * Constructs a new XGBoost model.
+     *
+     * @param trees List of XGBoost trees.
+     */
+    public XGModel(List<XGNode> trees) {
+        this.trees = trees;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Double predict(XGObject obj) {
+        double res = 0;
+
+        for (XGNode tree : trees)
+            res += tree.predict(obj);
+
+        return (1.0 / (1.0 + Math.exp(-res)));
+    }
+
+    /** {@inheritDoc} */
+    @Override public void close() {
+        // Do nothing.
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGNode.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGNode.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGNode.java
new file mode 100644
index 0000000..f3401a7
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGNode.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+/** XGBoost model node. */
+public interface XGNode {
+    /**
+     * Predicts label for the specified object.
+     *
+     * @param obj Object.
+     * @return Label.
+     */
+    public double predict(XGObject obj);
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGObject.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGObject.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGObject.java
new file mode 100644
index 0000000..408c170
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGObject.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+import java.io.Serializable;
+
+/**
+ * Base interface for objects processed by XGBoost model.
+ */
+public interface XGObject extends Serializable {
+    /**
+     * Returns feature value by the specified name.
+     *
+     * @param featureName Feature name.
+     * @return Feature value.
+     */
+    public Double getFeature(String featureName);
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGSplitNode.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGSplitNode.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGSplitNode.java
new file mode 100644
index 0000000..16c0ed4
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/XGSplitNode.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost;
+
+/** XGBoost model split node. */
+public class XGSplitNode implements XGNode {
+    /** Feature name. */
+    private final String featureName;
+
+    /** Threshold. */
+    private final double threshold;
+
+    /** "Yes" child node. */
+    private XGNode yesNode;
+
+    /** "No" child node. */
+    private XGNode noNode;
+
+    /** "Missing" child node. */
+    private XGNode missingNode;
+
+    /**
+     * Constructs a new instance of XGBoost model split node.
+     *
+     * @param featureName Feature name.
+     * @param threshold Threshold.
+     */
+    public XGSplitNode(String featureName, double threshold) {
+        this.featureName = featureName;
+        this.threshold = threshold;
+    }
+
+    /** {@inheritDoc} */
+    @Override public double predict(XGObject obj) {
+        Double featureVal = obj.getFeature(featureName);
+
+        if (featureVal == null)
+            return missingNode.predict(obj);
+        else if (featureVal < threshold)
+            return yesNode.predict(obj);
+        else
+            return noNode.predict(obj);
+    }
+
+    /** */
+    public void setYesNode(XGNode yesNode) {
+        this.yesNode = yesNode;
+    }
+
+    /** */
+    public void setNoNode(XGNode noNode) {
+        this.noNode = noNode;
+    }
+
+    /** */
+    public void setMissingNode(XGNode missingNode) {
+        this.missingNode = missingNode;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/package-info.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/package-info.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/package-info.java
new file mode 100644
index 0000000..ca95b1d
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * <!-- Package description. -->
+ * Base package for XGBoost model parser, correspondent DTOs and util classes.
+ */
+package org.apache.ignite.ml.xgboost;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.java
new file mode 100644
index 0000000..725b3c8
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelBaseVisitor.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
+
+/**
+ * This class provides an empty implementation of {@link XGBoostModelVisitor},
+ * which can be extended to create a visitor which only needs to handle a subset
+ * of the available methods.
+ *
+ * @param <T> The return type of the visit operation. Use {@link Void} for
+ * operations with no return type.
+ */
+public class XGBoostModelBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements XGBoostModelVisitor<T> {
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The default implementation returns the result of calling
+     * {@link #visitChildren} on {@code ctx}.</p>
+     */
+    @Override public T visitXgValue(XGBoostModelParser.XgValueContext ctx) { return visitChildren(ctx); }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The default implementation returns the result of calling
+     * {@link #visitChildren} on {@code ctx}.</p>
+     */
+    @Override public T visitXgHeader(XGBoostModelParser.XgHeaderContext ctx) { return visitChildren(ctx); }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The default implementation returns the result of calling
+     * {@link #visitChildren} on {@code ctx}.</p>
+     */
+    @Override public T visitXgNode(XGBoostModelParser.XgNodeContext ctx) { return visitChildren(ctx); }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The default implementation returns the result of calling
+     * {@link #visitChildren} on {@code ctx}.</p>
+     */
+    @Override public T visitXgLeaf(XGBoostModelParser.XgLeafContext ctx) { return visitChildren(ctx); }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The default implementation returns the result of calling
+     * {@link #visitChildren} on {@code ctx}.</p>
+     */
+    @Override public T visitXgTree(XGBoostModelParser.XgTreeContext ctx) { return visitChildren(ctx); }
+
+    /**
+     * {@inheritDoc}
+     *
+     * <p>The default implementation returns the result of calling
+     * {@link #visitChildren} on {@code ctx}.</p>
+     */
+    @Override public T visitXgModel(XGBoostModelParser.XgModelContext ctx) { return visitChildren(ctx); }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.java
new file mode 100644
index 0000000..fcec81f
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelLexer.java
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import org.antlr.v4.runtime.CharStream;
+import org.antlr.v4.runtime.Lexer;
+import org.antlr.v4.runtime.RuntimeMetaData;
+import org.antlr.v4.runtime.Vocabulary;
+import org.antlr.v4.runtime.VocabularyImpl;
+import org.antlr.v4.runtime.atn.ATN;
+import org.antlr.v4.runtime.atn.ATNDeserializer;
+import org.antlr.v4.runtime.atn.LexerATNSimulator;
+import org.antlr.v4.runtime.atn.PredictionContextCache;
+import org.antlr.v4.runtime.dfa.DFA;
+
+/**
+ * XGBoost model lexer generated by ANTLR.
+ */
+@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
+public class XGBoostModelLexer extends Lexer {
+    /** ANTLR version checker. */
+    static {
+        RuntimeMetaData.checkVersion("4.7.1", RuntimeMetaData.VERSION);
+    }
+
+    /** Decision to DFA. */
+    protected static final DFA[] _decisionToDFA;
+
+    /** Shared context cache. */
+    protected static final PredictionContextCache _sharedContextCache = new PredictionContextCache();
+
+    /** */
+    public static final int
+        YES = 1, NO = 2, MISSING = 3, EQ = 4, COMMA = 5, PLUS = 6, MINUS = 7, DOT = 8, EXP = 9,
+        BOOSTER = 10, LBRACK = 11, RBRACK = 12, COLON = 13, LEAF = 14, INT = 15, DOUBLE = 16,
+        STRING = 17, NEWLINE = 18, LT = 19, WS = 20;
+
+    /** Channel names. */
+    public static String[] channelNames = {
+        "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
+    };
+
+    /** Mode names. */
+    public static String[] modeNames = {
+        "DEFAULT_MODE"
+    };
+
+    /** Rule names. */
+    public static final String[] ruleNames = {
+        "YES", "NO", "MISSING", "EQ", "COMMA", "PLUS", "MINUS", "DOT", "EXP",
+        "BOOSTER", "LBRACK", "RBRACK", "COLON", "LEAF", "INT", "DOUBLE", "STRING",
+        "NEWLINE", "LT", "WS"
+    };
+
+    /** Literal names. */
+    private static final String[] _LITERAL_NAMES = {
+        null, "'yes'", "'no'", "'missing'", "'='", "','", "'+'", "'-'", "'.'",
+        null, "'booster'", "'['", "']'", "':'", "'leaf'", null, null, null, null,
+        "'<'"
+    };
+
+    /** Symbolic names. */
+    private static final String[] _SYMBOLIC_NAMES = {
+        null, "YES", "NO", "MISSING", "EQ", "COMMA", "PLUS", "MINUS", "DOT", "EXP",
+        "BOOSTER", "LBRACK", "RBRACK", "COLON", "LEAF", "INT", "DOUBLE", "STRING",
+        "NEWLINE", "LT", "WS"
+    };
+
+    /** Vocabulary. */
+    public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
+
+    /**
+     * Token names.
+     *
+     * @deprecated Use {@link #VOCABULARY} instead.
+     */
+    @Deprecated
+    public static final String[] tokenNames;
+
+    /** */
+    static {
+        tokenNames = new String[_SYMBOLIC_NAMES.length];
+        for (int i = 0; i < tokenNames.length; i++) {
+            tokenNames[i] = VOCABULARY.getLiteralName(i);
+            if (tokenNames[i] == null) {
+                tokenNames[i] = VOCABULARY.getSymbolicName(i);
+            }
+
+            if (tokenNames[i] == null) {
+                tokenNames[i] = "<INVALID>";
+            }
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Deprecated
+    @Override public String[] getTokenNames() {
+        return tokenNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override public Vocabulary getVocabulary() {
+        return VOCABULARY;
+    }
+
+    /**
+     * Constructs a new instance of XGBoost model lexer.
+     *
+     * @param input Character stream.
+     */
+    public XGBoostModelLexer(CharStream input) {
+        super(input);
+        _interp = new LexerATNSimulator(this, _ATN, _decisionToDFA, _sharedContextCache);
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getGrammarFileName() {
+        return "XGBoostModel.g4";
+    }
+
+    /** {@inheritDoc} */
+    @Override public String[] getRuleNames() {
+        return ruleNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String getSerializedATN() {
+        return _serializedATN;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String[] getChannelNames() {
+        return channelNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override public String[] getModeNames() {
+        return modeNames;
+    }
+
+    /** {@inheritDoc} */
+    @Override public ATN getATN() {
+        return _ATN;
+    }
+
+    /** Serialized ATN. */
+    public static final String _serializedATN =
+        "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\26\u0083\b\1\4\2" +
+            "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4" +
+            "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22" +
+            "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\3\2\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3" +
+            "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n" +
+            "\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16" +
+            "\3\17\3\17\3\17\3\17\3\17\3\20\3\20\5\20\\\n\20\3\20\6\20_\n\20\r\20\16" +
+            "\20`\3\21\3\21\3\21\7\21f\n\21\f\21\16\21i\13\21\3\21\3\21\3\21\5\21n" +
+            "\n\21\3\22\3\22\6\22r\n\22\r\22\16\22s\3\23\3\23\3\23\5\23y\n\23\3\24" +
+            "\3\24\3\25\6\25~\n\25\r\25\16\25\177\3\25\3\25\2\2\26\3\3\5\4\7\5\t\6" +
+            "\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24" +
+            "\'\25)\26\3\2\b\4\2GGgg\3\2\62;\5\2C\\aac|\6\2\62;C\\aac|\4\2\f\f\17\17" +
+            "\4\2\13\13\"\"\2\u008a\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2" +
+            "\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25" +
+            "\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2" +
+            "\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\3+\3\2\2" +
+            "\2\5/\3\2\2\2\7\62\3\2\2\2\t:\3\2\2\2\13<\3\2\2\2\r>\3\2\2\2\17@\3\2\2" +
+            "\2\21B\3\2\2\2\23D\3\2\2\2\25F\3\2\2\2\27N\3\2\2\2\31P\3\2\2\2\33R\3\2" +
+            "\2\2\35T\3\2\2\2\37[\3\2\2\2!b\3\2\2\2#o\3\2\2\2%x\3\2\2\2\'z\3\2\2\2" +
+            ")}\3\2\2\2+,\7{\2\2,-\7g\2\2-.\7u\2\2.\4\3\2\2\2/\60\7p\2\2\60\61\7q\2" +
+            "\2\61\6\3\2\2\2\62\63\7o\2\2\63\64\7k\2\2\64\65\7u\2\2\65\66\7u\2\2\66" +
+            "\67\7k\2\2\678\7p\2\289\7i\2\29\b\3\2\2\2:;\7?\2\2;\n\3\2\2\2<=\7.\2\2" +
+            "=\f\3\2\2\2>?\7-\2\2?\16\3\2\2\2@A\7/\2\2A\20\3\2\2\2BC\7\60\2\2C\22\3" +
+            "\2\2\2DE\t\2\2\2E\24\3\2\2\2FG\7d\2\2GH\7q\2\2HI\7q\2\2IJ\7u\2\2JK\7v" +
+            "\2\2KL\7g\2\2LM\7t\2\2M\26\3\2\2\2NO\7]\2\2O\30\3\2\2\2PQ\7_\2\2Q\32\3" +
+            "\2\2\2RS\7<\2\2S\34\3\2\2\2TU\7n\2\2UV\7g\2\2VW\7c\2\2WX\7h\2\2X\36\3" +
+            "\2\2\2Y\\\5\r\7\2Z\\\5\17\b\2[Y\3\2\2\2[Z\3\2\2\2[\\\3\2\2\2\\^\3\2\2" +
+            "\2]_\t\3\2\2^]\3\2\2\2_`\3\2\2\2`^\3\2\2\2`a\3\2\2\2a \3\2\2\2bc\5\37" +
+            "\20\2cg\5\21\t\2df\t\3\2\2ed\3\2\2\2fi\3\2\2\2ge\3\2\2\2gh\3\2\2\2hm\3" +
+            "\2\2\2ig\3\2\2\2jk\5\23\n\2kl\5\37\20\2ln\3\2\2\2mj\3\2\2\2mn\3\2\2\2" +
+            "n\"\3\2\2\2oq\t\4\2\2pr\t\5\2\2qp\3\2\2\2rs\3\2\2\2sq\3\2\2\2st\3\2\2" +
+            "\2t$\3\2\2\2uv\7\17\2\2vy\7\f\2\2wy\t\6\2\2xu\3\2\2\2xw\3\2\2\2y&\3\2" +
+            "\2\2z{\7>\2\2{(\3\2\2\2|~\t\7\2\2}|\3\2\2\2~\177\3\2\2\2\177}\3\2\2\2" +
+            "\177\u0080\3\2\2\2\u0080\u0081\3\2\2\2\u0081\u0082\b\25\2\2\u0082*\3\2" +
+            "\2\2\n\2[`gmsx\177\3\b\2\2";
+
+    /** ATN. */
+    public static final ATN _ATN =
+        new ATNDeserializer().deserialize(_serializedATN.toCharArray());
+
+    /** */
+    static {
+        _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
+        for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
+            _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ae29fca/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.java
----------------------------------------------------------------------
diff --git a/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.java b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.java
new file mode 100644
index 0000000..c0ad15a
--- /dev/null
+++ b/modules/ml/xgboost-model-parser/src/main/java/org/apache/ignite/ml/xgboost/parser/XGBoostModelListener.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.ml.xgboost.parser;
+
+import org.antlr.v4.runtime.tree.ParseTreeListener;
+
+/**
+ * This interface defines a complete listener for a parse tree produced by
+ * {@link XGBoostModelParser}.
+ */
+public interface XGBoostModelListener extends ParseTreeListener {
+    /**
+     * Enter a parse tree produced by {@link XGBoostModelParser#xgValue}.
+     * @param ctx the parse tree
+     */
+    public void enterXgValue(XGBoostModelParser.XgValueContext ctx);
+
+    /**
+     * Exit a parse tree produced by {@link XGBoostModelParser#xgValue}.
+     * @param ctx the parse tree
+     */
+    public void exitXgValue(XGBoostModelParser.XgValueContext ctx);
+
+    /**
+     * Enter a parse tree produced by {@link XGBoostModelParser#xgHeader}.
+     * @param ctx the parse tree
+     */
+    public void enterXgHeader(XGBoostModelParser.XgHeaderContext ctx);
+
+    /**
+     * Exit a parse tree produced by {@link XGBoostModelParser#xgHeader}.
+     * @param ctx the parse tree
+     */
+    public void exitXgHeader(XGBoostModelParser.XgHeaderContext ctx);
+
+    /**
+     * Enter a parse tree produced by {@link XGBoostModelParser#xgNode}.
+     * @param ctx the parse tree
+     */
+    public void enterXgNode(XGBoostModelParser.XgNodeContext ctx);
+
+    /**
+     * Exit a parse tree produced by {@link XGBoostModelParser#xgNode}.
+     * @param ctx the parse tree
+     */
+    public void exitXgNode(XGBoostModelParser.XgNodeContext ctx);
+
+    /**
+     * Enter a parse tree produced by {@link XGBoostModelParser#xgLeaf}.
+     * @param ctx the parse tree
+     */
+    public void enterXgLeaf(XGBoostModelParser.XgLeafContext ctx);
+
+    /**
+     * Exit a parse tree produced by {@link XGBoostModelParser#xgLeaf}.
+     * @param ctx the parse tree
+     */
+    public void exitXgLeaf(XGBoostModelParser.XgLeafContext ctx);
+
+    /**
+     * Enter a parse tree produced by {@link XGBoostModelParser#xgTree}.
+     * @param ctx the parse tree
+     */
+    public void enterXgTree(XGBoostModelParser.XgTreeContext ctx);
+
+    /**
+     * Exit a parse tree produced by {@link XGBoostModelParser#xgTree}.
+     * @param ctx the parse tree
+     */
+    public void exitXgTree(XGBoostModelParser.XgTreeContext ctx);
+
+    /**
+     * Enter a parse tree produced by {@link XGBoostModelParser#xgModel}.
+     * @param ctx the parse tree
+     */
+    public void enterXgModel(XGBoostModelParser.XgModelContext ctx);
+
+    /**
+     * Exit a parse tree produced by {@link XGBoostModelParser#xgModel}.
+     * @param ctx the parse tree
+     */
+    public void exitXgModel(XGBoostModelParser.XgModelContext ctx);
+}
\ No newline at end of file


[03/52] [abbrv] ignite git commit: IGNITE-10239 Update navigation and top menu. - Fixes #5630.

Posted by sb...@apache.org.
IGNITE-10239 Update navigation and top menu. - Fixes #5630.

Signed-off-by: Andrey Novikov <an...@gridgain.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/9dc251cd
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/9dc251cd
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/9dc251cd

Branch: refs/heads/ignite-627
Commit: 9dc251cd036a840313e3fb34aa9e522620fc2365
Parents: 8ef8466
Author: Ilya Borisov <Kl...@gmail.com>
Authored: Mon Dec 17 16:29:24 2018 +0700
Committer: Andrey Novikov <an...@gridgain.com>
Committed: Mon Dec 17 16:29:24 2018 +0700

----------------------------------------------------------------------
 .../e2e/testcafe/components/topNavigation.js    |   6 +-
 .../e2e/testcafe/components/userMenu.js         |   2 +-
 modules/web-console/frontend/app/app.config.js  |   7 +
 modules/web-console/frontend/app/app.js         |   8 +-
 .../connected-clusters-badge/style.scss         |  34 ++--
 .../connected-clusters-badge/template.pug       |   5 +-
 .../page-configure/icons/configuration.icon.svg |  13 ++
 .../app/components/page-configure/index.js      | 193 ------------------
 .../app/components/page-configure/index.ts      | 194 +++++++++++++++++++
 .../page-forgot-password/controller.js          |   8 +-
 .../app/components/page-forgot-password/run.js  |  11 +-
 .../components/page-forgot-password/style.scss  |  38 ++--
 .../page-forgot-password/template.pug           |  53 +++--
 .../app/components/page-landing/index.js        |  11 +-
 .../app/components/page-landing/public.pug      |  21 ++
 .../app/components/page-landing/style.scss      |  12 ++
 .../app/components/page-landing/template.pug    |   8 -
 .../page-password-changed/controller.js         |  26 ---
 .../page-password-changed/controller.ts         |  32 +++
 .../components/page-password-changed/index.js   |  10 +-
 .../components/page-password-changed/style.scss |  13 +-
 .../page-password-changed/template.pug          |   9 +-
 .../page-password-reset/controller.js           |  11 +-
 .../app/components/page-password-reset/index.js |  10 +-
 .../components/page-password-reset/style.scss   |  15 +-
 .../components/page-password-reset/template.pug | 102 ++++------
 .../app/components/page-queries/index.js        | 100 ----------
 .../app/components/page-queries/index.ts        | 110 +++++++++++
 .../app/components/page-signin/controller.ts    |   7 +-
 .../frontend/app/components/page-signin/run.ts  |  10 +-
 .../app/components/page-signin/style.scss       |  33 +---
 .../app/components/page-signin/template.pug     |  73 +++----
 .../app/components/page-signup/controller.ts    |  11 +-
 .../frontend/app/components/page-signup/run.js  |  11 +-
 .../app/components/page-signup/style.scss       |  26 +--
 .../app/components/page-signup/template.pug     |  36 ++--
 .../permanent-notifications/component.ts        |  25 +++
 .../permanent-notifications/controller.ts       |  28 +++
 .../components/permanent-notifications/index.ts |  21 ++
 .../permanent-notifications/style.scss          |  54 ++++++
 .../permanent-notifications/template.pug        |  23 +++
 .../app/components/timed-redirection/style.scss |   1 +
 .../components/web-console-footer/component.js  |   4 +-
 .../web-console-footer-links/component.js       |  23 ---
 .../web-console-footer-links/style.scss         |  31 ---
 .../web-console-footer-links/template.pug       |  17 --
 .../components/web-console-footer/controller.ts |  27 +++
 .../app/components/web-console-footer/index.js  |  11 +-
 .../components/web-console-footer/style.scss    |  93 ++++++---
 .../components/web-console-footer/template.pug  |  20 +-
 .../components/web-console-header/component.js  |  53 -----
 .../components/web-console-header/component.ts  |  43 ++++
 .../components/demo-mode-button/component.ts    |  24 +++
 .../components/demo-mode-button/controller.ts   |  46 +++++
 .../components/demo-mode-button/template.pug    |  20 ++
 .../components/user-menu/component.ts           |  25 +++
 .../components/user-menu/controller.ts          |  53 +++++
 .../components/user-menu/style.scss             |  28 +++
 .../components/user-menu/template.pug           |  26 +++
 .../web-console-header-content/component.ts     |  25 +++
 .../web-console-header-content/controller.ts    |  45 +++++
 .../web-console-header-content/style.scss       |  44 +++++
 .../web-console-header-content/template.pug     |  24 +++
 .../web-console-header-extension/component.js   |  22 ---
 .../web-console-header-extension/template.pug   |  15 --
 .../app/components/web-console-header/index.js  |   8 +-
 .../components/web-console-header/style.scss    | 168 +++-------------
 .../components/web-console-header/template.pug  |  32 ++-
 .../components/web-console-sidebar/component.ts |  25 +++
 .../web-console-sidebar/controller.ts           |  30 +++
 .../app/components/web-console-sidebar/index.ts |  25 +++
 .../components/web-console-sidebar/style.scss   |  44 +++++
 .../components/web-console-sidebar/template.pug |  22 +++
 .../web-console-sidebar-navigation/component.ts |  28 +++
 .../controller.ts                               |  24 +++
 .../web-console-sidebar-navigation/style.scss   | 108 +++++++++++
 .../web-console-sidebar-navigation/template.pug |  35 ++++
 .../web-console-sidebar-overflow/component.ts   |  26 +++
 .../web-console-sidebar-overflow/controller.ts  |  50 +++++
 .../web-console-sidebar-overflow/style.scss     |  52 +++++
 .../web-console-sidebar-overflow/template.pug   |  18 ++
 .../app/modules/branding/branding.module.js     |  10 +-
 .../app/modules/branding/branding.service.js    |   4 -
 .../app/modules/branding/footer.directive.js    |  39 ----
 .../modules/branding/header-logo.directive.js   |  39 ----
 .../app/modules/branding/header-logo.pug        |  18 --
 .../modules/branding/header-title.directive.js  |  44 -----
 .../branding/powered-by-apache.directive.js     |  39 ----
 .../app/modules/branding/powered-by-apache.pug  |  18 --
 .../frontend/app/modules/demo/Demo.module.js    |  28 ---
 .../app/modules/navbar/Navbar.provider.js       |  30 ---
 .../app/modules/navbar/navbar.directive.js      |  32 ---
 .../app/modules/navbar/navbar.module.js         |   9 +-
 .../app/modules/navbar/userbar.directive.js     |  59 ------
 .../web-console/frontend/app/services/store.ts  |  75 +++++++
 .../frontend/app/store/actions/ui.ts            |  36 ++++
 .../frontend/app/store/actions/user.ts          |  24 +++
 .../frontend/app/store/effects/ui.ts            |  32 +++
 modules/web-console/frontend/app/store/index.ts |  48 +++++
 .../web-console/frontend/app/store/ofType.ts    |  26 +++
 .../frontend/app/store/reducers/ui.ts           |  50 +++++
 .../frontend/app/store/reduxDebug.ts            |  45 +++++
 .../frontend/app/store/selectors/ui.ts          |  29 +++
 modules/web-console/frontend/app/types/index.ts |  30 +++
 .../public/images/icons/cluster.icon.svg        |  10 +
 .../images/icons/connectedClusters.icon.svg     |   1 -
 .../public/images/icons/downloadAgent.icon.svg  |  16 ++
 .../frontend/public/images/icons/index.js       |   5 +-
 .../frontend/public/images/icons/menu.icon.svg  |   7 +
 .../frontend/public/images/icons/sql.icon.svg   |   3 +
 .../frontend/public/stylesheets/style.scss      |  74 +++++--
 modules/web-console/frontend/views/base.pug     |  11 +-
 .../frontend/views/includes/header-left.pug     |  42 ----
 .../frontend/views/includes/header-right.pug    |  35 ----
 modules/web-console/frontend/views/public.pug   |  20 ++
 115 files changed, 2390 insertions(+), 1433 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/e2e/testcafe/components/topNavigation.js
----------------------------------------------------------------------
diff --git a/modules/web-console/e2e/testcafe/components/topNavigation.js b/modules/web-console/e2e/testcafe/components/topNavigation.js
index b4262d0..6db745e 100644
--- a/modules/web-console/e2e/testcafe/components/topNavigation.js
+++ b/modules/web-console/e2e/testcafe/components/topNavigation.js
@@ -17,5 +17,7 @@
 
 import {Selector} from 'testcafe';
 
-export const configureNavButton = Selector('.wch-nav-item').withText('Configure');
-export const queriesNavButton = Selector('.wch-nav-item').withText('Queries');
+export const toggleMenuButton = Selector('.web-console-header__togle-menu-button');
+
+export const configureNavButton = Selector('.web-console-sidebar-navigation__link[title="Configuration"]');
+export const queriesNavButton = Selector('.web-console-sidebar-navigation__link[title="Queries"]');

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/e2e/testcafe/components/userMenu.js
----------------------------------------------------------------------
diff --git a/modules/web-console/e2e/testcafe/components/userMenu.js b/modules/web-console/e2e/testcafe/components/userMenu.js
index 75246c8..973f21f 100644
--- a/modules/web-console/e2e/testcafe/components/userMenu.js
+++ b/modules/web-console/e2e/testcafe/components/userMenu.js
@@ -17,7 +17,7 @@
 
 import {Selector, t} from 'testcafe';
 
-const _selector = Selector('[ignite-userbar]');
+const _selector = Selector('user-menu');
 
 export const userMenu = {
     _selector,

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/app.config.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/app.config.js b/modules/web-console/frontend/app/app.config.js
index 88bffee..04c02ea 100644
--- a/modules/web-console/frontend/app/app.config.js
+++ b/modules/web-console/frontend/app/app.config.js
@@ -22,6 +22,7 @@ import isNil from 'lodash/isNil';
 import isEmpty from 'lodash/isEmpty';
 import mixin from 'lodash/mixin';
 
+import {user as userAction, register as registerStore} from './store';
 const nonNil = negate(isNil);
 const nonEmpty = negate(isEmpty);
 
@@ -36,6 +37,8 @@ import validationTemplateUrl from 'views/templates/validation-error.tpl.pug';
 
 const igniteConsoleCfg = angular.module('ignite-console.config', ['ngAnimate', 'mgcrea.ngStrap']);
 
+igniteConsoleCfg.run(registerStore);
+
 // Configure AngularJS animation: do not animate fa-spin.
 igniteConsoleCfg.config(['$animateProvider', ($animateProvider) => {
     $animateProvider.classNameFilter(/^((?!(fa-spin|ng-animate-disabled)).)*$/);
@@ -133,3 +136,7 @@ igniteConsoleCfg.directive('uiGridSelection', function() {
         }
     };
 });
+
+igniteConsoleCfg.run(['$rootScope', 'Store', ($root, store) => {
+    $root.$on('user', (event, user) => store.dispatch(userAction({...user})));
+}]);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/app.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/app.js b/modules/web-console/frontend/app/app.js
index 2dd2733..e1cbdbb 100644
--- a/modules/web-console/frontend/app/app.js
+++ b/modules/web-console/frontend/app/app.js
@@ -96,6 +96,7 @@ import {CSV} from './services/CSV';
 import {$exceptionHandler} from './services/exceptionHandler';
 import IGFSs from './services/IGFSs';
 import Models from './services/Models';
+import {Store} from './services/store';
 
 import AngularStrapTooltip from './services/AngularStrapTooltip.decorator';
 import AngularStrapSelect from './services/AngularStrapSelect.decorator';
@@ -159,6 +160,8 @@ import pageSignup from './components/page-signup';
 import pageSignin from './components/page-signin';
 import pageForgotPassword from './components/page-forgot-password';
 import formSignup from './components/form-signup';
+import sidebar from './components/web-console-sidebar';
+import permanentNotifications from './components/permanent-notifications';
 
 import igniteServices from './services';
 
@@ -266,7 +269,9 @@ export default angular.module('ignite-console', [
     progressLine.name,
     formField.name,
     formSignup.name,
-    timedRedirection.name
+    timedRedirection.name,
+    sidebar.name,
+    permanentNotifications.name
 ])
 .service('$exceptionHandler', $exceptionHandler)
 // Directives.
@@ -314,6 +319,7 @@ export default angular.module('ignite-console', [
 .service('CSV', CSV)
 .service('IGFSs', IGFSs)
 .service('Models', Models)
+.service('Store', Store)
 // Filters.
 .filter('byName', byName)
 .filter('bytes', bytes)

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/connected-clusters-badge/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/connected-clusters-badge/style.scss b/modules/web-console/frontend/app/components/connected-clusters-badge/style.scss
index 3b2d202..e46e382 100644
--- a/modules/web-console/frontend/app/components/connected-clusters-badge/style.scss
+++ b/modules/web-console/frontend/app/components/connected-clusters-badge/style.scss
@@ -18,26 +18,26 @@
 connected-clusters {
     @import "./../../../public/stylesheets/variables.scss";
 
-    div {
-        position: absolute;
-        top: 0;
-        right: 30px;
+    height: 100%;
+    display: flex;
 
-        display: flex;
-        align-items: center;
-        padding: 3px 10px;
-
-        cursor: pointer;
-        color: white;
-        font-size: 12px;
-        line-height: 12px;
+    .connected-cluster-badge__count {
+        color: $ignite-brand-success;
+        margin-left: 5px;
+    }
 
-        background-color: $text-color;
+    button {
+        height: 100%;
+        width: 100%;
+        background: none !important;
+        border: none !important;
+        margin: 0 !important;
+        padding: 0 !important;
+        outline: none !important;
 
-        border-radius: 0 0 4px 4px;
+        display: flex;
+        align-items: center;
 
-        [ignite-icon] {
-            margin-right: 6px;
-        }
+        font-size: 14px;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/connected-clusters-badge/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/connected-clusters-badge/template.pug b/modules/web-console/frontend/app/components/connected-clusters-badge/template.pug
index 49224e5..dfb4bd9 100644
--- a/modules/web-console/frontend/app/components/connected-clusters-badge/template.pug
+++ b/modules/web-console/frontend/app/components/connected-clusters-badge/template.pug
@@ -14,6 +14,5 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-div(ng-click='$ctrl.show()')
-    svg(ignite-icon='connectedClusters')
-    | Connected clusters: {{ $ctrl.connectedClusters }}
+button(type='button' ng-click='$ctrl.show()')
+    | My Connected Clusters: <span class='connected-cluster-badge__count'>{{ $ctrl.connectedClusters }}</span>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-configure/icons/configuration.icon.svg
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/icons/configuration.icon.svg b/modules/web-console/frontend/app/components/page-configure/icons/configuration.icon.svg
new file mode 100644
index 0000000..7c0ac7a
--- /dev/null
+++ b/modules/web-console/frontend/app/components/page-configure/icons/configuration.icon.svg
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="17" viewBox="0 0 20 17">
+    <g fill="none" fill-rule="evenodd" transform="translate(0 1)">
+        <rect width="11" height="2" x="9" y="1" fill="currentColor" rx="1"/>
+        <rect width="5" height="2" x="15" y="7" fill="currentColor" rx="1"/>
+        <rect width="8" height="2" x="12" y="13" fill="currentColor" rx="1"/>
+        <rect width="5" height="2" y="1" fill="currentColor" rx="1"/>
+        <rect width="11" height="2" y="7" fill="currentColor" rx="1"/>
+        <rect width="8" height="2" y="13" fill="currentColor" rx="1"/>
+        <circle cx="5" cy="1.776" r="1" stroke="currentColor" stroke-width="2"/>
+        <circle cx="11" cy="7.776" r="1" stroke="currentColor" stroke-width="2"/>
+        <circle cx="8" cy="13.776" r="1" stroke="currentColor" stroke-width="2"/>
+    </g>
+</svg>

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-configure/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/index.js b/modules/web-console/frontend/app/components/page-configure/index.js
deleted file mode 100644
index 531b46c..0000000
--- a/modules/web-console/frontend/app/components/page-configure/index.js
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import angular from 'angular';
-
-import 'angular1-async-filter';
-import {UIRouterRx} from '@uirouter/rx';
-import uiValidate from 'angular-ui-validate';
-
-import component from './component';
-import ConfigureState from './services/ConfigureState';
-import PageConfigure from './services/PageConfigure';
-import ConfigurationDownload from './services/ConfigurationDownload';
-import ConfigChangesGuard from './services/ConfigChangesGuard';
-import ConfigSelectionManager from './services/ConfigSelectionManager';
-import SummaryZipper from './services/SummaryZipper';
-import ConfigurationResource from './services/ConfigurationResource';
-import selectors from './store/selectors';
-import effects from './store/effects';
-
-import projectStructurePreview from './components/modal-preview-project';
-import itemsTable from './components/pc-items-table';
-import pcUiGridFilters from './components/pc-ui-grid-filters';
-import isInCollection from './components/pcIsInCollection';
-import pcValidation from './components/pcValidation';
-import fakeUiCanExit from './components/fakeUICanExit';
-import formUICanExitGuard from './components/formUICanExitGuard';
-import modalImportModels from './components/modal-import-models';
-import buttonImportModels from './components/button-import-models';
-import buttonDownloadProject from './components/button-download-project';
-import buttonPreviewProject from './components/button-preview-project';
-import previewPanel from './components/preview-panel';
-import pcSplitButton from './components/pc-split-button';
-
-import {errorState} from './transitionHooks/errorState';
-import {default as ActivitiesData} from 'app/core/activities/Activities.data';
-
-import 'rxjs/add/operator/withLatestFrom';
-import 'rxjs/add/operator/skip';
-
-import {Observable} from 'rxjs/Observable';
-
-Observable.prototype.debug = function(l) {
-    return this.do((v) => console.log(l, v), (e) => console.error(l, e), () => console.log(l, 'completed'));
-};
-
-import {
-    editReducer2,
-    shortObjectsReducer,
-    reducer,
-    editReducer,
-    loadingReducer,
-    itemsEditReducerFactory,
-    mapStoreReducerFactory,
-    mapCacheReducerFactory,
-    basicCachesActionTypes,
-    clustersActionTypes,
-    shortClustersActionTypes,
-    cachesActionTypes,
-    shortCachesActionTypes,
-    modelsActionTypes,
-    shortModelsActionTypes,
-    igfssActionTypes,
-    shortIGFSsActionTypes,
-    refsReducer
-} from './reducer';
-
-import {reducer as reduxDevtoolsReducer, devTools} from './reduxDevtoolsIntegration';
-import {registerStates} from './states';
-
-/**
- * @param {uirouter.UIRouter} $uiRouter
- * @param {ActivitiesData} ActivitiesData
- */
-function registerActivitiesHook($uiRouter, ActivitiesData) {
-    $uiRouter.transitionService.onSuccess({to: 'base.configuration.**'}, (transition) => {
-        ActivitiesData.post({group: 'configuration', action: transition.targetState().name()});
-    });
-}
-
-registerActivitiesHook.$inject = ['$uiRouter', 'IgniteActivitiesData'];
-
-export default angular
-    .module('ignite-console.page-configure', [
-        'ui.router',
-        'asyncFilter',
-        uiValidate,
-        pcUiGridFilters.name,
-        projectStructurePreview.name,
-        itemsTable.name,
-        pcValidation.name,
-        modalImportModels.name,
-        buttonImportModels.name,
-        buttonDownloadProject.name,
-        buttonPreviewProject.name,
-        previewPanel.name,
-        pcSplitButton.name
-    ])
-    .config(registerStates)
-    .config(['DefaultStateProvider', (DefaultState) => {
-        DefaultState.setRedirectTo(() => 'base.configuration.overview');
-    }])
-    .run(registerActivitiesHook)
-    .run(['ConfigEffects', 'ConfigureState', '$uiRouter', (ConfigEffects, ConfigureState, $uiRouter) => {
-        $uiRouter.plugin(UIRouterRx);
-
-        if (devTools) {
-            devTools.subscribe((e) => {
-                if (e.type === 'DISPATCH' && e.state) ConfigureState.actions$.next(e);
-            });
-
-            ConfigureState.actions$
-                .filter((e) => e.type !== 'DISPATCH')
-                .withLatestFrom(ConfigureState.state$.skip(1))
-                .subscribe(([action, state]) => devTools.send(action, state));
-
-            ConfigureState.addReducer(reduxDevtoolsReducer);
-        }
-
-        ConfigureState.addReducer(refsReducer({
-            models: {at: 'domains', store: 'caches'},
-            caches: {at: 'caches', store: 'models'}
-        }));
-
-        ConfigureState.addReducer((state, action) => Object.assign({}, state, {
-            clusterConfiguration: editReducer(state.clusterConfiguration, action),
-            configurationLoading: loadingReducer(state.configurationLoading, action),
-            basicCaches: itemsEditReducerFactory(basicCachesActionTypes)(state.basicCaches, action),
-            clusters: mapStoreReducerFactory(clustersActionTypes)(state.clusters, action),
-            shortClusters: mapCacheReducerFactory(shortClustersActionTypes)(state.shortClusters, action),
-            caches: mapStoreReducerFactory(cachesActionTypes)(state.caches, action),
-            shortCaches: mapCacheReducerFactory(shortCachesActionTypes)(state.shortCaches, action),
-            models: mapStoreReducerFactory(modelsActionTypes)(state.models, action),
-            shortModels: mapCacheReducerFactory(shortModelsActionTypes)(state.shortModels, action),
-            igfss: mapStoreReducerFactory(igfssActionTypes)(state.igfss, action),
-            shortIgfss: mapCacheReducerFactory(shortIGFSsActionTypes)(state.shortIgfss, action),
-            edit: editReducer2(state.edit, action)
-        }));
-
-        ConfigureState.addReducer(shortObjectsReducer);
-
-        ConfigureState.addReducer((state, action) => {
-            switch (action.type) {
-                case 'APPLY_ACTIONS_UNDO':
-                    return action.state;
-
-                default:
-                    return state;
-            }
-        });
-
-        const la = ConfigureState.actions$.scan((acc, action) => [...acc, action], []);
-
-        ConfigureState.actions$
-            .filter((a) => a.type === 'UNDO_ACTIONS')
-            .withLatestFrom(la, ({actions}, actionsWindow, initialState) => {
-                return {
-                    type: 'APPLY_ACTIONS_UNDO',
-                    state: actionsWindow.filter((a) => !actions.includes(a)).reduce(ConfigureState._combinedReducer, {})
-                };
-            })
-            .do((a) => ConfigureState.dispatchAction(a))
-            .subscribe();
-        ConfigEffects.connect();
-    }])
-    .component('pageConfigure', component)
-    .directive('pcIsInCollection', isInCollection)
-    .directive('fakeUiCanExit', fakeUiCanExit)
-    .directive('formUiCanExitGuard', formUICanExitGuard)
-    .factory('configSelectionManager', ConfigSelectionManager)
-    .service('IgniteSummaryZipper', SummaryZipper)
-    .service('IgniteConfigurationResource', ConfigurationResource)
-    .service('ConfigSelectors', selectors)
-    .service('ConfigEffects', effects)
-    .service('ConfigChangesGuard', ConfigChangesGuard)
-    .service('PageConfigure', PageConfigure)
-    .service('ConfigureState', ConfigureState)
-    .service('ConfigurationDownload', ConfigurationDownload)
-    .run(errorState);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-configure/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/index.ts b/modules/web-console/frontend/app/components/page-configure/index.ts
new file mode 100644
index 0000000..dd2ad20
--- /dev/null
+++ b/modules/web-console/frontend/app/components/page-configure/index.ts
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import angular from 'angular';
+
+import 'angular1-async-filter';
+import {UIRouterRx} from '@uirouter/rx';
+import uiValidate from 'angular-ui-validate';
+
+import component from './component';
+import ConfigureState from './services/ConfigureState';
+import PageConfigure from './services/PageConfigure';
+import ConfigurationDownload from './services/ConfigurationDownload';
+import ConfigChangesGuard from './services/ConfigChangesGuard';
+import ConfigSelectionManager from './services/ConfigSelectionManager';
+import SummaryZipper from './services/SummaryZipper';
+import ConfigurationResource from './services/ConfigurationResource';
+import selectors from './store/selectors';
+import effects from './store/effects';
+
+import projectStructurePreview from './components/modal-preview-project';
+import itemsTable from './components/pc-items-table';
+import pcUiGridFilters from './components/pc-ui-grid-filters';
+import isInCollection from './components/pcIsInCollection';
+import pcValidation from './components/pcValidation';
+import fakeUiCanExit from './components/fakeUICanExit';
+import formUICanExitGuard from './components/formUICanExitGuard';
+import modalImportModels from './components/modal-import-models';
+import buttonImportModels from './components/button-import-models';
+import buttonDownloadProject from './components/button-download-project';
+import buttonPreviewProject from './components/button-preview-project';
+import previewPanel from './components/preview-panel';
+import pcSplitButton from './components/pc-split-button';
+
+import {errorState} from './transitionHooks/errorState';
+import {default as ActivitiesData} from 'app/core/activities/Activities.data';
+
+import 'rxjs/add/operator/withLatestFrom';
+import 'rxjs/add/operator/skip';
+
+import {Observable} from 'rxjs/Observable';
+
+import {navigationMenuItem, AppStore} from '../../store';
+import {default as configurationIcon} from './icons/configuration.icon.svg';
+import {default as IconsService} from '../ignite-icon/service';
+
+Observable.prototype.debug = function(l) {
+    return this.do((v) => console.log(l, v), (e) => console.error(l, e), () => console.log(l, 'completed'));
+};
+
+import {
+    editReducer2,
+    shortObjectsReducer,
+    reducer,
+    editReducer,
+    loadingReducer,
+    itemsEditReducerFactory,
+    mapStoreReducerFactory,
+    mapCacheReducerFactory,
+    basicCachesActionTypes,
+    clustersActionTypes,
+    shortClustersActionTypes,
+    cachesActionTypes,
+    shortCachesActionTypes,
+    modelsActionTypes,
+    shortModelsActionTypes,
+    igfssActionTypes,
+    shortIGFSsActionTypes,
+    refsReducer
+} from './reducer';
+
+import {reducer as reduxDevtoolsReducer, devTools} from './reduxDevtoolsIntegration';
+import {registerStates} from './states';
+
+/**
+ * @param {uirouter.UIRouter} $uiRouter
+ * @param {ActivitiesData} ActivitiesData
+ */
+function registerActivitiesHook($uiRouter, ActivitiesData) {
+    $uiRouter.transitionService.onSuccess({to: 'base.configuration.**'}, (transition) => {
+        ActivitiesData.post({group: 'configuration', action: transition.targetState().name()});
+    });
+}
+
+registerActivitiesHook.$inject = ['$uiRouter', 'IgniteActivitiesData'];
+
+export default angular
+    .module('ignite-console.page-configure', [
+        'ui.router',
+        'asyncFilter',
+        uiValidate,
+        pcUiGridFilters.name,
+        projectStructurePreview.name,
+        itemsTable.name,
+        pcValidation.name,
+        modalImportModels.name,
+        buttonImportModels.name,
+        buttonDownloadProject.name,
+        buttonPreviewProject.name,
+        previewPanel.name,
+        pcSplitButton.name
+    ])
+    .config(registerStates)
+    .config(['DefaultStateProvider', (DefaultState) => {
+        DefaultState.setRedirectTo(() => 'base.configuration.overview');
+    }])
+    .run(registerActivitiesHook)
+    .run(['ConfigEffects', 'ConfigureState', '$uiRouter', 'Store', 'IgniteIcon', (ConfigEffects, ConfigureState, $uiRouter, store: AppStore, icons: IconsService) => {
+        icons.registerIcons({configuration: configurationIcon});
+
+        $uiRouter.plugin(UIRouterRx);
+
+        ConfigureState.addReducer(refsReducer({
+            models: {at: 'domains', store: 'caches'},
+            caches: {at: 'caches', store: 'models'}
+        }));
+
+        ConfigureState.addReducer((state, action) => Object.assign({}, state, {
+            clusterConfiguration: editReducer(state.clusterConfiguration, action),
+            configurationLoading: loadingReducer(state.configurationLoading, action),
+            basicCaches: itemsEditReducerFactory(basicCachesActionTypes)(state.basicCaches, action),
+            clusters: mapStoreReducerFactory(clustersActionTypes)(state.clusters, action),
+            shortClusters: mapCacheReducerFactory(shortClustersActionTypes)(state.shortClusters, action),
+            caches: mapStoreReducerFactory(cachesActionTypes)(state.caches, action),
+            shortCaches: mapCacheReducerFactory(shortCachesActionTypes)(state.shortCaches, action),
+            models: mapStoreReducerFactory(modelsActionTypes)(state.models, action),
+            shortModels: mapCacheReducerFactory(shortModelsActionTypes)(state.shortModels, action),
+            igfss: mapStoreReducerFactory(igfssActionTypes)(state.igfss, action),
+            shortIgfss: mapCacheReducerFactory(shortIGFSsActionTypes)(state.shortIgfss, action),
+            edit: editReducer2(state.edit, action)
+        }));
+
+        ConfigureState.addReducer(shortObjectsReducer);
+
+        ConfigureState.addReducer((state, action) => {
+            switch (action.type) {
+                case 'APPLY_ACTIONS_UNDO':
+                    return action.state;
+
+                default:
+                    return state;
+            }
+        });
+
+        const la = ConfigureState.actions$.scan((acc, action) => [...acc, action], []);
+
+        ConfigureState.actions$
+            .filter((a) => a.type === 'UNDO_ACTIONS')
+            .withLatestFrom(la, ({actions}, actionsWindow, initialState) => {
+                return {
+                    type: 'APPLY_ACTIONS_UNDO',
+                    state: actionsWindow.filter((a) => !actions.includes(a)).reduce(ConfigureState._combinedReducer, {})
+                };
+            })
+            .do((a) => ConfigureState.dispatchAction(a))
+            .subscribe();
+        ConfigEffects.connect();
+
+        store.dispatch(navigationMenuItem({
+            activeSref: 'base.configuration.**',
+            icon: 'configuration',
+            label: 'Configuration',
+            order: 1,
+            sref: 'base.configuration.overview'
+        }));
+    }])
+    .component('pageConfigure', component)
+    .directive('pcIsInCollection', isInCollection)
+    .directive('fakeUiCanExit', fakeUiCanExit)
+    .directive('formUiCanExitGuard', formUICanExitGuard)
+    .factory('configSelectionManager', ConfigSelectionManager)
+    .service('IgniteSummaryZipper', SummaryZipper)
+    .service('IgniteConfigurationResource', ConfigurationResource)
+    .service('ConfigSelectors', selectors)
+    .service('ConfigEffects', effects)
+    .service('ConfigChangesGuard', ConfigChangesGuard)
+    .service('PageConfigure', PageConfigure)
+    .service('ConfigureState', ConfigureState)
+    .service('ConfigurationDownload', ConfigurationDownload)
+    .run(errorState);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-forgot-password/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-forgot-password/controller.js b/modules/web-console/frontend/app/components/page-forgot-password/controller.js
index 7d06773..86597af 100644
--- a/modules/web-console/frontend/app/components/page-forgot-password/controller.js
+++ b/modules/web-console/frontend/app/components/page-forgot-password/controller.js
@@ -24,22 +24,26 @@ export default class PageForgotPassword {
     data = {email: null};
     /** @type {string} */
     serverError = null;
+    /** @type {JQLite} */
+    el;
 
-    static $inject = ['Auth', 'IgniteMessages', 'IgniteFormUtils'];
+    static $inject = ['Auth', 'IgniteMessages', 'IgniteFormUtils', '$element'];
 
     /**
      * @param {import('app/modules/user/Auth.service').default} Auth
      */
-    constructor(Auth, IgniteMessages, IgniteFormUtils) {
+    constructor(Auth, IgniteMessages, IgniteFormUtils, el) {
         this.Auth = Auth;
         this.IgniteMessages = IgniteMessages;
         this.IgniteFormUtils = IgniteFormUtils;
+        this.el = el;
     }
     /** @param {import('./types').IForgotPasswordFormController} form */
     canSubmitForm(form) {
         return form.$error.server ? true : !form.$invalid;
     }
     $postLink() {
+        this.el.addClass('public-page');
         this.form.email.$validators.server = () => !this.serverError;
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-forgot-password/run.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-forgot-password/run.js b/modules/web-console/frontend/app/components/page-forgot-password/run.js
index c7ee6a6..d9259e9 100644
--- a/modules/web-console/frontend/app/components/page-forgot-password/run.js
+++ b/modules/web-console/frontend/app/components/page-forgot-password/run.js
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+import publicTemplate from '../../../views/public.pug';
+
 /**
  * @param {import("@uirouter/angularjs").UIRouter} $uiRouter
  */
@@ -23,7 +25,14 @@ export function registerState($uiRouter) {
     const state = {
         name: 'forgotPassword',
         url: '/forgot-password',
-        component: 'pageForgotPassword',
+        views: {
+            '': {
+                template: publicTemplate
+            },
+            'page@forgotPassword': {
+                component: 'pageForgotPassword'
+            }
+        },
         unsaved: true,
         tfMetaTags: {
             title: 'Forgot Password'

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-forgot-password/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-forgot-password/style.scss b/modules/web-console/frontend/app/components/page-forgot-password/style.scss
index 86425c1..7893c62 100644
--- a/modules/web-console/frontend/app/components/page-forgot-password/style.scss
+++ b/modules/web-console/frontend/app/components/page-forgot-password/style.scss
@@ -20,34 +20,22 @@ page-forgot-password {
     flex-direction: column;
     flex: 1 0 auto;
 
-    section {
-        margin-left: auto;
-        margin-right: auto;
-        width: 530px;
-
-        h3 {
-            font-size: 38px;
-            font-weight: 300;
-            margin: 30px 0 30px;
-        }
-
-        p {
-            margin-bottom: 20px;
-        }
+    p {
+        margin-bottom: 20px;
+    }
 
-        .form-field {
-            margin: 10px 0;
-        }
+    .form-field {
+        margin: 10px 0;
+    }
 
-        .form-footer {
-            padding: 15px 0;
-            text-align: right;
-            display: flex;
-            align-items: center;
+    .form-footer {
+        padding: 15px 0;
+        text-align: right;
+        display: flex;
+        align-items: center;
 
-            .btn-ignite {
-                margin-left: auto;
-            }
+        .btn-ignite {
+            margin-left: auto;
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-forgot-password/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-forgot-password/template.pug b/modules/web-console/frontend/app/components/page-forgot-password/template.pug
index 82e7898..309e9b9 100644
--- a/modules/web-console/frontend/app/components/page-forgot-password/template.pug
+++ b/modules/web-console/frontend/app/components/page-forgot-password/template.pug
@@ -16,34 +16,25 @@
 
 include /app/helpers/jade/mixins
 
-web-console-header
-    web-console-header-left
-        ignite-header-title
-
-.container--responsive.body-container
-    section
-        - const form = '$ctrl.form'
-        h3 Forgot password?
-        p Enter the email address for your account & we'll email you a link to reset your password.
-        form(name=form novalidate ng-submit='$ctrl.remindPassword()')
-            +form-field__email({
-                label: 'Email:',
-                model: '$ctrl.data.email',
-                name: '"email"',
-                placeholder: 'Input email',
-                required: true
-            })(
-                ng-model-options='{allowInvalid: true}'
-                autocomplete='email'
-                ignite-auto-focus
-                tabindex='0'
-            )
-                +form-field__error({error: 'server', message: `{{$ctrl.serverError}}`})
-            footer.form-footer
-                a(ui-sref='signin') Back to sign in
-                button.btn-ignite.btn-ignite--primary(
-                    tabindex='1'
-                    type='submit'
-                ) Send it to me
-
-web-console-footer
+h3.public-page__title Forgot password?
+p Enter the email address for your account & we'll email you a link to reset your password.
+form(name='$ctrl.form' novalidate ng-submit='$ctrl.remindPassword()')
+    +form-field__email({
+        label: 'Email:',
+        model: '$ctrl.data.email',
+        name: '"email"',
+        placeholder: 'Input email',
+        required: true
+    })(
+        ng-model-options='{allowInvalid: true}'
+        autocomplete='email'
+        ignite-auto-focus
+        tabindex='0'
+    )
+        +form-field__error({error: 'server', message: `{{$ctrl.serverError}}`})
+    footer.form-footer
+        a(ui-sref='signin') Back to sign in
+        button.btn-ignite.btn-ignite--primary(
+            tabindex='1'
+            type='submit'
+        ) Send it to me

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-landing/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-landing/index.js b/modules/web-console/frontend/app/components/page-landing/index.js
index 8f678f3..cabb5bb 100644
--- a/modules/web-console/frontend/app/components/page-landing/index.js
+++ b/modules/web-console/frontend/app/components/page-landing/index.js
@@ -17,6 +17,7 @@
 
 import angular from 'angular';
 
+import baseTemplate from './public.pug';
 import template from './template.pug';
 import './style.scss';
 
@@ -44,7 +45,15 @@ export default angular
         $stateProvider
         .state('landing', {
             url: '/',
-            template: '<page-landing></page-landing>',
+            views: {
+                '@': {
+                    template: baseTemplate
+                },
+                'page@landing': {
+                    component: 'pageLanding'
+                }
+            },
+            // template: '<page-landing></page-landing>',
             redirectTo: (trans) => {
                 return trans.injector().get('User').read()
                     .then(() => {

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-landing/public.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-landing/public.pug b/modules/web-console/frontend/app/components/page-landing/public.pug
new file mode 100644
index 0000000..d9153f5
--- /dev/null
+++ b/modules/web-console/frontend/app/components/page-landing/public.pug
@@ -0,0 +1,21 @@
+//-
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+web-console-header(hide-menu-button='true')
+    .web-console-header-content__title Management console for Apache Ignite
+    .page-landing__button-signin.btn-ignite.btn-ignite--primary(ui-sref='signin') Sign In
+.content(ui-view='page')
+web-console-footer.web-console-footer__page-bottom
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-landing/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-landing/style.scss b/modules/web-console/frontend/app/components/page-landing/style.scss
index a92206b..90f3dda 100644
--- a/modules/web-console/frontend/app/components/page-landing/style.scss
+++ b/modules/web-console/frontend/app/components/page-landing/style.scss
@@ -24,8 +24,20 @@
     @include custom_btn;
 }
 
+.page-landing__button-signin {
+    align-self: center;
+    margin-left: 30px;
+    margin-right: var(--page-side-padding) !important;
+    min-width: 80px;
+    font-weight: 500;
+    padding: 10px 25px !important;
+    flex: 0 0 auto;
+}
+
 page-landing {
     font-family: Roboto;
+    display: block;
+    margin: 0 calc(var(--page-side-padding) * -1) calc(var(--page-side-padding) * -1);
 
     .btn-custom {
         @include custom_btn;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-landing/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-landing/template.pug b/modules/web-console/frontend/app/components/page-landing/template.pug
index 0fc1f9c..bf926fa 100644
--- a/modules/web-console/frontend/app/components/page-landing/template.pug
+++ b/modules/web-console/frontend/app/components/page-landing/template.pug
@@ -14,12 +14,6 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-web-console-header
-    web-console-header-left
-        ignite-header-title
-    web-console-header-right
-        a#signin_show.btn-ignite.btn-ignite--primary(ui-sref='signin') Sign In
-
 section.intro-container-wrapper
     .container
         .col-lg-6.col-md-6.col-sm-6.col-xs-12.intro-content
@@ -62,5 +56,3 @@ section.features-container-wrapper
                     p The Web Console allows you to have accounts with different roles.
         .align-center.text-center
             a.btn.btn-lg.btn-primary.btn-custom(ui-sref='signup') Get Started
-
-web-console-footer

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-changed/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-changed/controller.js b/modules/web-console/frontend/app/components/page-password-changed/controller.js
deleted file mode 100644
index e3b0a03..0000000
--- a/modules/web-console/frontend/app/components/page-password-changed/controller.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-export default class {
-    static $inject = ['$state', '$timeout'];
-
-    constructor($state, $timeout) {
-        $timeout(() => {
-            $state.go('signin');
-        }, 10000);
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-changed/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-changed/controller.ts b/modules/web-console/frontend/app/components/page-password-changed/controller.ts
new file mode 100644
index 0000000..9696a09
--- /dev/null
+++ b/modules/web-console/frontend/app/components/page-password-changed/controller.ts
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {StateService} from '@uirouter/angularjs';
+
+export default class implements ng.IPostLink {
+    static $inject = ['$state', '$timeout', '$element'];
+
+    constructor($state: StateService, $timeout: ng.ITimeoutService, private el: JQLite) {
+        $timeout(() => {
+            $state.go('signin');
+        }, 10000);
+    }
+
+    $postLink() {
+        this.el.addClass('public-page');
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-changed/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-changed/index.js b/modules/web-console/frontend/app/components/page-password-changed/index.js
index 7c244be..903138f 100644
--- a/modules/web-console/frontend/app/components/page-password-changed/index.js
+++ b/modules/web-console/frontend/app/components/page-password-changed/index.js
@@ -19,6 +19,7 @@ import angular from 'angular';
 
 import template from './template.pug';
 import controller from './controller';
+import publicTemplate from '../../../views/public.pug';
 
 import './style.scss';
 
@@ -32,7 +33,14 @@ export default angular
     .config(['$stateProvider', ($stateProvider) => {
         $stateProvider.state('password.send', {
             url: '/changed',
-            component: 'pagePasswordChanged',
+            views: {
+                '@': {
+                    template: publicTemplate
+                },
+                'page@password.send': {
+                    component: 'pagePasswordChanged'
+                }
+            },
             tfMetaTags: {
                 title: 'Password send'
             },

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-changed/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-changed/style.scss b/modules/web-console/frontend/app/components/page-password-changed/style.scss
index eeb44ec..e32e9b2 100644
--- a/modules/web-console/frontend/app/components/page-password-changed/style.scss
+++ b/modules/web-console/frontend/app/components/page-password-changed/style.scss
@@ -19,17 +19,10 @@ page-password-changed {
     display: flex;
     flex: 1 0 auto;
     flex-direction: column;
-
     min-height: 100%;
-
-    font-family: Roboto;
-
-    .body-container {
-        display: flex;
-        flex-direction: column;
-        justify-content: center;
-        align-items: center;
-    }
+    justify-content: center;
+    align-items: center;
+    max-width: initial !important;
 
     h2 {
         margin-bottom: 30px;

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-changed/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-changed/template.pug b/modules/web-console/frontend/app/components/page-password-changed/template.pug
index 7d2d986..82c2cc1 100644
--- a/modules/web-console/frontend/app/components/page-password-changed/template.pug
+++ b/modules/web-console/frontend/app/components/page-password-changed/template.pug
@@ -14,9 +14,8 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-.container.body-container
-    h2 Ready!
+h2 Ready!
 
-    p 
-        | Further instructions for password reset have been sent to your e-mail address.#[br]
-        | You'll be redirected back automatically in a few seconds. If not, please #[a(ui-sref='signin') click here].
+p 
+    | Further instructions for password reset have been sent to your e-mail address.#[br]
+    | You'll be redirected back automatically in a few seconds. If not, please #[a(ui-sref='signin') click here].

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-reset/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-reset/controller.js b/modules/web-console/frontend/app/components/page-password-reset/controller.js
index 53d6c69..b69e566 100644
--- a/modules/web-console/frontend/app/components/page-password-reset/controller.js
+++ b/modules/web-console/frontend/app/components/page-password-reset/controller.js
@@ -16,7 +16,9 @@
  */
 
 export default class {
-    static $inject = ['$modal', '$http', '$state', 'IgniteMessages'];
+    static $inject = ['$modal', '$http', '$state', 'IgniteMessages', '$element'];
+    /** @type {JQLite} */
+    el;
 
     /**
      * @param {mgcrea.ngStrap.modal.IModalService} $modal
@@ -24,10 +26,15 @@ export default class {
      * @param {import('@uirouter/angularjs').StateService} $state
      * @param {ReturnType<typeof import('app/services/Messages.service').default>} Messages
      */
-    constructor($modal, $http, $state, Messages) {
+    constructor($modal, $http, $state, Messages, el) {
         this.$http = $http;
         this.$state = $state;
         this.Messages = Messages;
+        this.el = el;
+    }
+
+    $postLink() {
+        this.el.addClass('public-page');
     }
 
     $onInit() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-reset/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-reset/index.js b/modules/web-console/frontend/app/components/page-password-reset/index.js
index e1042a6..c07fa23 100644
--- a/modules/web-console/frontend/app/components/page-password-reset/index.js
+++ b/modules/web-console/frontend/app/components/page-password-reset/index.js
@@ -22,6 +22,7 @@ import _ from 'lodash';
 
 import template from './template.pug';
 import controller from './controller';
+import publicTemplate from '../../../views/public.pug';
 
 import './style.scss';
 
@@ -42,7 +43,14 @@ export default angular
         })
         .state('password.reset', {
             url: '/reset?{token}',
-            component: 'pagePasswordReset',
+            views: {
+                '@': {
+                    template: publicTemplate
+                },
+                'page@password.reset': {
+                    component: 'pagePasswordReset'
+                }
+            },
             redirectTo: (trans) => {
                 if (_.isEmpty(trans.params('to').token))
                     return 'signin';

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-reset/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-reset/style.scss b/modules/web-console/frontend/app/components/page-password-reset/style.scss
index 75f758e..05ef953 100644
--- a/modules/web-console/frontend/app/components/page-password-reset/style.scss
+++ b/modules/web-console/frontend/app/components/page-password-reset/style.scss
@@ -20,12 +20,19 @@ page-password-reset {
     flex: 1 0 auto;
     flex-direction: column;
 
-    footer {
+    .form-footer {
+        padding: 15px 0;
+        text-align: right;
         display: flex;
-        justify-content: flex-end;
+        align-items: center;
+
+        .btn-ignite {
+            margin-left: auto;
+        }
     }
 
-    .btn-ignite + .btn-ignite {
-        margin-left: 10px;
+    form {
+        display: grid;
+        grid-gap: 10px;
     }
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-password-reset/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-password-reset/template.pug b/modules/web-console/frontend/app/components/page-password-reset/template.pug
index 1acfab8..c0df3c9 100644
--- a/modules/web-console/frontend/app/components/page-password-reset/template.pug
+++ b/modules/web-console/frontend/app/components/page-password-reset/template.pug
@@ -16,65 +16,45 @@
 
 include /app/helpers/jade/mixins
 
-web-console-header
-    web-console-header-left
-        ignite-header-title
+//- This doesn't seem to do anything 😵
+.main-content(ng-if='error')
+    .text-center
+        p {{::$ctrl.ui.error}}
+h3.public-page__title(ng-if-start='$ctrl.ui.token && !$ctrl.ui.error') Reset Password
+form.page-password-reset__grid(name='$ctrl.form' ng-init='reset_info.token = token' ng-if-end)
+    +form-field__email({
+        label: 'E-mail:',
+        model: '$ctrl.ui.email',
+        disabled: true
+    })
+
+    +form-field__password({
+        label: 'New password:',
+        model: '$ctrl.ui.password',
+        name: '"password"',
+        required: true,
+        placeholder: 'New password'
+    })(
+        ignite-auto-focus
+        ignite-on-enter-focus-move='passwordConfirmInput'
+    )
+    +form-field__password({
+        label: 'Confirm password:',
+        model: 'confirm',
+        name: '"passwordConfirm"',
+        required: true,
+        placeholder: 'Confirm new password'
+    })(
+        ignite-on-enter-focus-move='resetForm.$valid && resetPassword(user_info)'
+        ignite-match='$ctrl.ui.password'
+    )
+
+    footer.form-footer
+        a(ui-sref='default-state') Cancel
+        button.btn-ignite.btn-ignite--primary(
+            ng-disabled='$ctrl.form.$invalid'
+            ng-click='$ctrl.resetPassword()'
+        )
+            svg.icon-left(ignite-icon='checkmark')
+            | Save Changes
 
-.container.body-container
-    .row
-        .main-content(ng-if='error')
-            .text-center
-                p {{::$ctrl.ui.error}}
-        div(ng-if='$ctrl.ui.token && !$ctrl.ui.error')
-            header.header-with-selector
-                div
-                    h1 Reset Password
-
-            -var form = '$ctrl.form'
-            form.theme--ignite(name='$ctrl.form' ng-init='reset_info.token = token')
-                .row
-                    .col-50
-                        +form-field__email({
-                            label: 'E-mail:',
-                            model: '$ctrl.ui.email',
-                            disabled: true
-                        })
-
-                .row
-                    .col-50
-                        +form-field__password({
-                            label: 'New password:',
-                            model: '$ctrl.ui.password',
-                            name: '"password"',
-                            required: true,
-                            placeholder: 'New password'
-                        })(
-                            ignite-auto-focus
-                            ignite-on-enter-focus-move='passwordConfirmInput'
-                        )
-
-                .row
-                    .col-50
-                        +form-field__password({
-                            label: 'Confirm password:',
-                            model: 'confirm',
-                            name: '"passwordConfirm"',
-                            required: true,
-                            placeholder: 'Confirm new password'
-                        })(
-                            ignite-on-enter-focus-move='resetForm.$valid && resetPassword(user_info)'
-                            ignite-match='$ctrl.ui.password'
-                        )
-
-                hr
-
-                footer
-                    a.btn-ignite.btn-ignite--link-success(type='button' ui-sref='default-state') Cancel
-                    button.btn-ignite.btn-ignite--success(
-                        ng-disabled='$ctrl.form.$invalid'
-                        ng-click='$ctrl.resetPassword()'
-                    )
-                        svg.icon-left(ignite-icon='checkmark')
-                        | Save Changes
-
-web-console-footer

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-queries/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-queries/index.js b/modules/web-console/frontend/app/components/page-queries/index.js
deleted file mode 100644
index ba9e511..0000000
--- a/modules/web-console/frontend/app/components/page-queries/index.js
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import './style.scss';
-
-import angular from 'angular';
-
-import queriesNotebooksList from './components/queries-notebooks-list';
-import queriesNotebook from './components/queries-notebook';
-import pageQueriesCmp from './component';
-import {default as ActivitiesData} from 'app/core/activities/Activities.data';
-import Notebook from './notebook.service';
-
-/**
- * @param {uirouter.UIRouter} $uiRouter
- * @param {ActivitiesData} ActivitiesData
- */
-function registerActivitiesHook($uiRouter, ActivitiesData) {
-    $uiRouter.transitionService.onSuccess({to: 'base.sql.**'}, (transition) => {
-        ActivitiesData.post({group: 'sql', action: transition.targetState().name()});
-    });
-}
-
-registerActivitiesHook.$inject = ['$uiRouter', 'IgniteActivitiesData'];
-
-export default angular.module('ignite-console.sql', [
-    'ui.router',
-    queriesNotebooksList.name,
-    queriesNotebook.name
-])
-    .component('pageQueries', pageQueriesCmp)
-    .component('pageQueriesSlot', {
-        require: {
-            pageQueries: '^pageQueries'
-        },
-        bindings: {
-            slotName: '<'
-        },
-        controller: class {
-            static $inject = ['$transclude', '$timeout'];
-
-            constructor($transclude, $timeout) {
-                this.$transclude = $transclude;
-                this.$timeout = $timeout;
-            }
-
-            $postLink() {
-                this.$transclude((clone) => {
-                    this.pageQueries[this.slotName].empty();
-                    clone.appendTo(this.pageQueries[this.slotName]);
-                });
-            }
-        },
-        transclude: true
-    })
-    .service('IgniteNotebook', Notebook)
-    .config(['$stateProvider', ($stateProvider) => {
-        // set up the states
-        $stateProvider
-            .state('base.sql', {
-                abstract: true
-            })
-            .state('base.sql.tabs', {
-                url: '/queries',
-                component: 'pageQueries',
-                redirectTo: 'base.sql.tabs.notebooks-list',
-                permission: 'query'
-            })
-            .state('base.sql.tabs.notebooks-list', {
-                url: '/notebooks',
-                component: 'queriesNotebooksList',
-                permission: 'query',
-                tfMetaTags: {
-                    title: 'Notebooks'
-                }
-            })
-            .state('base.sql.notebook', {
-                url: '/notebook/{noteId}',
-                component: 'queriesNotebook',
-                permission: 'query',
-                tfMetaTags: {
-                    title: 'Query notebook'
-                }
-            });
-    }])
-    .run(registerActivitiesHook);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-queries/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-queries/index.ts b/modules/web-console/frontend/app/components/page-queries/index.ts
new file mode 100644
index 0000000..2e25cb0
--- /dev/null
+++ b/modules/web-console/frontend/app/components/page-queries/index.ts
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import './style.scss';
+
+import angular from 'angular';
+
+import queriesNotebooksList from './components/queries-notebooks-list';
+import queriesNotebook from './components/queries-notebook';
+import pageQueriesCmp from './component';
+import {default as ActivitiesData} from 'app/core/activities/Activities.data';
+import Notebook from './notebook.service';
+import {navigationMenuItem, AppStore} from '../../store';
+
+/**
+ * @param {uirouter.UIRouter} $uiRouter
+ * @param {ActivitiesData} ActivitiesData
+ */
+function registerActivitiesHook($uiRouter, ActivitiesData) {
+    $uiRouter.transitionService.onSuccess({to: 'base.sql.**'}, (transition) => {
+        ActivitiesData.post({group: 'sql', action: transition.targetState().name()});
+    });
+}
+
+registerActivitiesHook.$inject = ['$uiRouter', 'IgniteActivitiesData'];
+
+export default angular.module('ignite-console.sql', [
+    'ui.router',
+    queriesNotebooksList.name,
+    queriesNotebook.name
+])
+    .run(['Store', (store: AppStore) => {
+        store.dispatch(navigationMenuItem({
+            activeSref: 'base.sql.**',
+            icon: 'sql',
+            label: 'Queries',
+            order: 2,
+            sref: 'base.sql.tabs.notebooks-list'
+        }));
+    }])
+    .component('pageQueries', pageQueriesCmp)
+    .component('pageQueriesSlot', {
+        require: {
+            pageQueries: '^pageQueries'
+        },
+        bindings: {
+            slotName: '<'
+        },
+        controller: class {
+            static $inject = ['$transclude', '$timeout'];
+
+            constructor($transclude, $timeout) {
+                this.$transclude = $transclude;
+                this.$timeout = $timeout;
+            }
+
+            $postLink() {
+                this.$transclude((clone) => {
+                    this.pageQueries[this.slotName].empty();
+                    clone.appendTo(this.pageQueries[this.slotName]);
+                });
+            }
+        },
+        transclude: true
+    })
+    .service('IgniteNotebook', Notebook)
+    .config(['$stateProvider', ($stateProvider) => {
+        // set up the states
+        $stateProvider
+            .state('base.sql', {
+                abstract: true
+            })
+            .state('base.sql.tabs', {
+                url: '/queries',
+                component: 'pageQueries',
+                redirectTo: 'base.sql.tabs.notebooks-list',
+                permission: 'query'
+            })
+            .state('base.sql.tabs.notebooks-list', {
+                url: '/notebooks',
+                component: 'queriesNotebooksList',
+                permission: 'query',
+                tfMetaTags: {
+                    title: 'Notebooks'
+                }
+            })
+            .state('base.sql.notebook', {
+                url: '/notebook/{noteId}',
+                component: 'queriesNotebook',
+                permission: 'query',
+                tfMetaTags: {
+                    title: 'Query notebook'
+                }
+            });
+    }])
+    .run(registerActivitiesHook);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signin/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signin/controller.ts b/modules/web-console/frontend/app/components/page-signin/controller.ts
index c461b86..18fee0b 100644
--- a/modules/web-console/frontend/app/components/page-signin/controller.ts
+++ b/modules/web-console/frontend/app/components/page-signin/controller.ts
@@ -27,7 +27,7 @@ interface ISigninFormController extends ng.IFormController {
     password: ng.INgModelController
 }
 
-export default class {
+export default class implements ng.IPostLink {
     data: ISiginData = {
         email: null,
         password: null
@@ -37,15 +37,16 @@ export default class {
 
     serverError: string = null;
 
-    static $inject = ['Auth', 'IgniteMessages', 'IgniteFormUtils'];
+    static $inject = ['Auth', 'IgniteMessages', 'IgniteFormUtils', '$element'];
 
-    constructor(private Auth: AuthService, private IgniteMessages, private IgniteFormUtils) {}
+    constructor(private Auth: AuthService, private IgniteMessages, private IgniteFormUtils, private el: JQLite) {}
 
     canSubmitForm(form: ISigninFormController) {
         return form.$error.server ? true : !form.$invalid;
     }
 
     $postLink() {
+        this.el.addClass('public-page');
         this.form.email.$validators.server = () => !this.serverError;
         this.form.password.$validators.server = () => !this.serverError;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signin/run.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signin/run.ts b/modules/web-console/frontend/app/components/page-signin/run.ts
index aa5647c..4c0a1e6 100644
--- a/modules/web-console/frontend/app/components/page-signin/run.ts
+++ b/modules/web-console/frontend/app/components/page-signin/run.ts
@@ -15,6 +15,7 @@
  * limitations under the License.
  */
 
+import publicTemplate from '../../../views/public.pug';
 import {UIRouter} from '@uirouter/angularjs';
 import {IIgniteNg1StateDeclaration} from 'app/types';
 
@@ -22,7 +23,14 @@ export function registerState($uiRouter: UIRouter) {
     const state: IIgniteNg1StateDeclaration = {
         url: '/signin',
         name: 'signin',
-        component: 'pageSignin',
+        views: {
+            '': {
+                template: publicTemplate
+            },
+            'page@signin': {
+                component: 'pageSignin'
+            }
+        },
         unsaved: true,
         redirectTo: (trans) => {
             const skipStates = new Set(['signup', 'forgotPassword', 'landing']);

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signin/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signin/style.scss b/modules/web-console/frontend/app/components/page-signin/style.scss
index 51da101..729d439 100644
--- a/modules/web-console/frontend/app/components/page-signin/style.scss
+++ b/modules/web-console/frontend/app/components/page-signin/style.scss
@@ -18,32 +18,19 @@
 page-signin {
     display: flex;
     flex-direction: column;
-    flex: 1 0 auto;
 
-    section {
-        margin-left: auto;
-        margin-right: auto;
-        width: 530px;
-
-        h3 {
-            font-size: 38px;
-            font-weight: 300;
-            margin: 30px 0 30px;
-        }
-
-        .form-field {
-            margin: 10px 0;
-        }
+    .form-field {
+        margin: 10px 0;
+    }
 
-        .form-footer {
-            padding: 15px 0;
-            text-align: right;
-            display: flex;
-            align-items: center;
+    .form-footer {
+        padding: 15px 0;
+        text-align: right;
+        display: flex;
+        align-items: center;
 
-            .btn-ignite {
-                margin-left: auto;
-            }
+        .btn-ignite {
+            margin-left: auto;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signin/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signin/template.pug b/modules/web-console/frontend/app/components/page-signin/template.pug
index b31a9bd..2a128a0 100644
--- a/modules/web-console/frontend/app/components/page-signin/template.pug
+++ b/modules/web-console/frontend/app/components/page-signin/template.pug
@@ -16,44 +16,35 @@
 
 include /app/helpers/jade/mixins
 
-web-console-header
-    web-console-header-left
-        ignite-header-title
-
-.container--responsive.body-container
-    section
-        -var form = '$ctrl.form'
-        h3 Sign In
-        form(name=form novalidate ng-submit='$ctrl.signin()')
-            +form-field__email({
-                label: 'Email:',
-                model: '$ctrl.data.email',
-                name: '"email"',
-                placeholder: 'Input email',
-                required: true
-            })(
-                ng-model-options='{allowInvalid: true}'
-                autocomplete='email'
-                ignite-auto-focus
-            )
-                +form-field__error({error: 'server', message: `{{$ctrl.serverError}}`})
-            +form-field__password({
-                label: 'Password:',
-                model: '$ctrl.data.password',
-                name: '"password"',
-                placeholder: 'Input password',
-                required: true
-            })(
-                ng-model-options='{allowInvalid: true}'
-                autocomplete='current-password'
-            )
-                +form-field__error({error: 'server', message: `{{$ctrl.serverError}}`})
-            footer.form-footer
-                a(ui-sref='forgotPassword({email: $ctrl.data.email})') Forgot password?
-                button.btn-ignite.btn-ignite--primary(
-                    type='submit'
-                ) Sign In
-        footer.page-signin__no-account-message
-            | Don't have an account? #[a(ui-sref='signup') Get started]
-
-web-console-footer
+h3.public-page__title Sign In
+form(name='$ctrl.form' novalidate ng-submit='$ctrl.signin()')
+    +form-field__email({
+        label: 'Email:',
+        model: '$ctrl.data.email',
+        name: '"email"',
+        placeholder: 'Input email',
+        required: true
+    })(
+        ng-model-options='{allowInvalid: true}'
+        autocomplete='email'
+        ignite-auto-focus
+    )
+        +form-field__error({error: 'server', message: `{{$ctrl.serverError}}`})
+    +form-field__password({
+        label: 'Password:',
+        model: '$ctrl.data.password',
+        name: '"password"',
+        placeholder: 'Input password',
+        required: true
+    })(
+        ng-model-options='{allowInvalid: true}'
+        autocomplete='current-password'
+    )
+        +form-field__error({error: 'server', message: `{{$ctrl.serverError}}`})
+    footer.form-footer
+        a(ui-sref='forgotPassword({email: $ctrl.data.email})') Forgot password?
+        button.btn-ignite.btn-ignite--primary(
+            type='submit'
+        ) Sign In
+footer.page-signin__no-account-message
+    | Don't have an account? #[a(ui-sref='signup') Get started]

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signup/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signup/controller.ts b/modules/web-console/frontend/app/components/page-signup/controller.ts
index ddf77be..93d9987 100644
--- a/modules/web-console/frontend/app/components/page-signup/controller.ts
+++ b/modules/web-console/frontend/app/components/page-signup/controller.ts
@@ -20,7 +20,7 @@ import MessagesFactory from '../../services/Messages.service';
 import FormUtilsFactoryFactory from '../../services/FormUtils.service';
 import {ISignupData} from '../form-signup';
 
-export default class PageSignup {
+export default class PageSignup implements ng.IPostLink {
     form: ng.IFormController;
 
     data: ISignupData = {
@@ -34,14 +34,19 @@ export default class PageSignup {
 
     serverError: string | null = null;
 
-    static $inject = ['Auth', 'IgniteMessages', 'IgniteFormUtils'];
+    static $inject = ['Auth', 'IgniteMessages', 'IgniteFormUtils', '$element'];
 
     constructor(
         private Auth: Auth,
         private IgniteMessages: ReturnType<typeof MessagesFactory>,
-        private IgniteFormUtils: ReturnType<typeof FormUtilsFactoryFactory>
+        private IgniteFormUtils: ReturnType<typeof FormUtilsFactoryFactory>,
+        private el: JQLite
     ) {}
 
+    $postLink() {
+        this.el.addClass('public-page');
+    }
+
     canSubmitForm(form: PageSignup['form']) {
         return form.$error.server ? true : !form.$invalid;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signup/run.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signup/run.js b/modules/web-console/frontend/app/components/page-signup/run.js
index 1d04fa2..bd27638 100644
--- a/modules/web-console/frontend/app/components/page-signup/run.js
+++ b/modules/web-console/frontend/app/components/page-signup/run.js
@@ -15,6 +15,8 @@
  * limitations under the License.
  */
 
+import publicTemplate from '../../../views/public.pug';
+
 /**
  * @param {import("@uirouter/angularjs").UIRouter} $uiRouter
  */
@@ -23,7 +25,14 @@ export function registerState($uiRouter) {
     const state = {
         name: 'signup',
         url: '/signup',
-        component: 'pageSignup',
+        views: {
+            '': {
+                template: publicTemplate
+            },
+            'page@signup': {
+                component: 'pageSignup'
+            }
+        },
         unsaved: true,
         tfMetaTags: {
             title: 'Sign Up'

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signup/style.scss
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signup/style.scss b/modules/web-console/frontend/app/components/page-signup/style.scss
index 98c4729..0930036 100644
--- a/modules/web-console/frontend/app/components/page-signup/style.scss
+++ b/modules/web-console/frontend/app/components/page-signup/style.scss
@@ -20,26 +20,14 @@ page-signup {
     flex-direction: column;
     flex: 1 0 auto;
 
-    section {
-        h3 {
-            font-size: 38px;
-            font-weight: 300;
-            margin: 30px 0 30px;
-        }
-
-        margin-left: auto;
-        margin-right: auto;
-        width: 530px;
-
-        form footer {
-            padding: 15px 0;
-            text-align: right;
-            display: flex;
-            align-items: center;
+    form footer {
+        padding: 15px 0;
+        text-align: right;
+        display: flex;
+        align-items: center;
 
-            .btn-ignite {
-                margin-left: auto;
-            }
+        .btn-ignite {
+            margin-left: auto;
         }
     }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/page-signup/template.pug
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signup/template.pug b/modules/web-console/frontend/app/components/page-signup/template.pug
index 5584dfc..686079a 100644
--- a/modules/web-console/frontend/app/components/page-signup/template.pug
+++ b/modules/web-console/frontend/app/components/page-signup/template.pug
@@ -14,26 +14,16 @@
     See the License for the specific language governing permissions and
     limitations under the License.
 
-include /app/helpers/jade/mixins
-
-web-console-header
-    web-console-header-left
-        ignite-header-title
-
-.container--responsive.body-container
-    section
-        h3 Don't Have An Account?
-        form(name='$ctrl.form' novalidate ng-submit='$ctrl.signup()')
-            form-signup(
-                outer-form='$ctrl.form'
-                ng-model='$ctrl.data'
-                server-error='$ctrl.serverError'
-            )
-            footer.full-width.form-footer
-                button.btn-ignite.btn-ignite--primary(
-                    type='submit'
-                ) Sign Up
-        footer.page-signup__has-account-message
-            | Already have an account? #[a(ui-sref='signin') Sign in here]
-
-web-console-footer
+h3.public-page__title Don't Have An Account?
+form(name='$ctrl.form' novalidate ng-submit='$ctrl.signup()')
+    form-signup(
+        outer-form='$ctrl.form'
+        ng-model='$ctrl.data'
+        server-error='$ctrl.serverError'
+    )
+    footer.full-width.form-footer
+        button.btn-ignite.btn-ignite--primary(
+            type='submit'
+        ) Sign Up
+footer.page-signup__has-account-message
+    | Already have an account? #[a(ui-sref='signin') Sign in here]

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/permanent-notifications/component.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/permanent-notifications/component.ts b/modules/web-console/frontend/app/components/permanent-notifications/component.ts
new file mode 100644
index 0000000..e86d3e5
--- /dev/null
+++ b/modules/web-console/frontend/app/components/permanent-notifications/component.ts
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import template from './template.pug';
+import controller from './controller';
+import './style.scss';
+
+export const component: ng.IComponentOptions = {
+    template,
+    controller
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/permanent-notifications/controller.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/permanent-notifications/controller.ts b/modules/web-console/frontend/app/components/permanent-notifications/controller.ts
new file mode 100644
index 0000000..d672304
--- /dev/null
+++ b/modules/web-console/frontend/app/components/permanent-notifications/controller.ts
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export default class PermanentNotifications {
+    static $inject = ['UserNotifications', '$rootScope', '$window']
+    constructor(
+        private UserNotifications: unknown,
+        private $rootScope: ng.IRootScopeService,
+        private $window: ng.IWindowService
+    ) {}
+    closeDemo() {
+        this.$window.close();
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9dc251cd/modules/web-console/frontend/app/components/permanent-notifications/index.ts
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/permanent-notifications/index.ts b/modules/web-console/frontend/app/components/permanent-notifications/index.ts
new file mode 100644
index 0000000..33a9189
--- /dev/null
+++ b/modules/web-console/frontend/app/components/permanent-notifications/index.ts
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import {component} from './component';
+
+export default angular.module('ignite-console.permanent-notifications', [])
+    .component('permanentNotifications', component);


[20/52] [abbrv] ignite git commit: IGNITE-1094 muted test related (revert dddde3d63621b02e0015aa98fabdffaa27b9a12b) - Fixes #5692.

Posted by sb...@apache.org.
IGNITE-1094 muted test related (revert dddde3d63621b02e0015aa98fabdffaa27b9a12b) - Fixes #5692.

Signed-off-by: Dmitriy Govorukhin <dm...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/64e0e69a
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/64e0e69a
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/64e0e69a

Branch: refs/heads/ignite-627
Commit: 64e0e69a542dff79c7abf5f46193a6eaa3b5485b
Parents: 00af5e6
Author: Slava Koptilin <sl...@gmail.com>
Authored: Tue Dec 18 16:22:45 2018 +0300
Committer: Dmitriy Govorukhin <dm...@gmail.com>
Committed: Tue Dec 18 16:22:45 2018 +0300

----------------------------------------------------------------------
 .../persistence/standbycluster/IgniteChangeGlobalStateTest.java    | 2 ++
 .../cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java  | 2 ++
 .../cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java  | 2 ++
 .../cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java  | 1 +
 .../ignite/cache/store/jdbc/CacheJdbcBlobStoreFactorySelfTest.java | 2 ++
 .../ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java | 2 ++
 6 files changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/64e0e69a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteChangeGlobalStateTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteChangeGlobalStateTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteChangeGlobalStateTest.java
index ede7fb1..5fb6dc1 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteChangeGlobalStateTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/standbycluster/IgniteChangeGlobalStateTest.java
@@ -557,6 +557,8 @@ public class IgniteChangeGlobalStateTest extends IgniteChangeGlobalStateAbstract
      */
     @Test
     public void testActivateAfterFailGetLock() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
+
         Ignite ig1P = primary(0);
         Ignite ig2P = primary(1);
         Ignite ig3P = primary(2);

http://git-wip-us.apache.org/repos/asf/ignite/blob/64e0e69a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
index a0663f3..e115551 100644
--- a/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
+++ b/modules/hibernate-4.2/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
@@ -90,6 +90,8 @@ public class CacheHibernateStoreFactorySelfTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncorrectBeanConfiguration() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
+
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
                 try(Ignite ignite =

http://git-wip-us.apache.org/repos/asf/ignite/blob/64e0e69a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
index 8519923..86a058b 100644
--- a/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
+++ b/modules/hibernate-5.1/src/test/java/org/apache/ignite/cache/store/hibernate/CacheHibernateStoreFactorySelfTest.java
@@ -90,6 +90,8 @@ public class CacheHibernateStoreFactorySelfTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncorrectBeanConfiguration() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
+
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
                 try(Ignite ignite =

http://git-wip-us.apache.org/repos/asf/ignite/blob/64e0e69a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
index a2c3a39..b737efb 100644
--- a/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
+++ b/modules/jta/src/test/java/org/apache/ignite/internal/processors/cache/jta/GridPartitionedCacheJtaLookupClassNameSelfTest.java
@@ -40,6 +40,7 @@ public class GridPartitionedCacheJtaLookupClassNameSelfTest extends AbstractCach
     /**
      *
      */
+    @IgniteIgnore(value = "https://issues.apache.org/jira/browse/IGNITE-10723", forceFailure = true)
     public void testIncompatibleTmLookup() {
         final IgniteEx ignite = grid(0);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/64e0e69a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactorySelfTest.java b/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactorySelfTest.java
index c6a73e0..1822bec 100644
--- a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactorySelfTest.java
+++ b/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcBlobStoreFactorySelfTest.java
@@ -84,6 +84,8 @@ public class CacheJdbcBlobStoreFactorySelfTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncorrectBeanConfiguration() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
+
         GridTestUtils.assertThrows(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
                 try(Ignite ignite = Ignition.start("modules/spring/src/test/config/incorrect-store-cache.xml")) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/64e0e69a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java
----------------------------------------------------------------------
diff --git a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java b/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java
index a6c4d4c..141bb63 100644
--- a/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java
+++ b/modules/spring/src/test/java/org/apache/ignite/cache/store/jdbc/CacheJdbcPojoStoreFactorySelfTest.java
@@ -76,6 +76,8 @@ public class CacheJdbcPojoStoreFactorySelfTest extends GridCommonAbstractTest {
      */
     @Test
     public void testIncorrectBeanConfiguration() throws Exception {
+        fail("https://issues.apache.org/jira/browse/IGNITE-10723");
+
         GridTestUtils.assertThrowsAnyCause(log, new Callable<Object>() {
             @Override public Object call() throws Exception {
                 try (Ignite ignored = Ignition.start("modules/spring/src/test/config/pojo-incorrect-store-cache.xml")) {


[09/52] [abbrv] ignite git commit: IGNITE-10682 Disable unnecessary loaded plugins for the Inspection test suite. - Fixes #5666.

Posted by sb...@apache.org.
IGNITE-10682 Disable unnecessary loaded plugins for the Inspection test suite. - Fixes #5666.

Signed-off-by: Dmitriy Pavlov <dp...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/5310d373
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/5310d373
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/5310d373

Branch: refs/heads/ignite-627
Commit: 5310d373a7b36aad27e8b21eb0463cb9d96fad69
Parents: 8cb502b
Author: Maxim Muzafarov <ma...@gmail.com>
Authored: Mon Dec 17 19:31:01 2018 +0300
Committer: Dmitriy Pavlov <dp...@apache.org>
Committed: Mon Dec 17 19:31:01 2018 +0300

----------------------------------------------------------------------
 idea/disabled_plugins.txt | 113 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 113 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/5310d373/idea/disabled_plugins.txt
----------------------------------------------------------------------
diff --git a/idea/disabled_plugins.txt b/idea/disabled_plugins.txt
new file mode 100644
index 0000000..1dad326
--- /dev/null
+++ b/idea/disabled_plugins.txt
@@ -0,0 +1,113 @@
+AntSupport
+CVS
+ClearcasePlugin
+Coverage
+DevKit
+Emma
+GenerateToString
+Geronimo
+Glassfish
+Guice
+HtmlTools
+IdeaServerPlugin
+Inspection-JS
+InspectionGadgets
+IntentionPowerPack
+J2ME
+JBoss
+JSIntentionPowerPack
+JSR45Plugin
+JSTestDriver Plugin
+JUnit
+Java EE: Web Services (JAX-WS)
+JavaScript
+JavaScriptDebugger
+Jetty
+NodeJS
+Osmorc
+PerforceDirectPlugin
+Pythonid
+QuirksMode
+Refactor-X
+Resin
+SourceSafe
+StrutsAssistant
+Subversion
+TFS
+TestNG-J
+Tomcat
+Type Migration
+W3Validators
+WebServicesPlugin
+WebSphere
+Weblogic
+XPathView
+XSLT-Debugger
+ZKM
+com.android.tools.idea.smali
+com.intellij.aop
+com.intellij.apacheConfig
+com.intellij.appengine
+com.intellij.aspectj
+com.intellij.beanValidation
+com.intellij.cdi
+com.intellij.commander
+com.intellij.copyright
+com.intellij.css
+com.intellij.database
+com.intellij.diagram
+com.intellij.dmserver
+com.intellij.dsm
+com.intellij.flex
+com.intellij.freemarker
+com.intellij.guice
+com.intellij.gwt
+com.intellij.hibernate
+com.intellij.java-i18n
+com.intellij.java.cucumber
+com.intellij.javaee
+com.intellij.javaee.view
+com.intellij.jsf
+com.intellij.jsp
+com.intellij.persistence
+com.intellij.phing
+com.intellij.seam
+com.intellij.seam.pageflow
+com.intellij.seam.pages
+com.intellij.spring
+com.intellij.spring.batch
+com.intellij.spring.data
+com.intellij.spring.integration
+com.intellij.spring.osgi
+com.intellij.spring.roo
+com.intellij.spring.security
+com.intellij.spring.webflow
+com.intellij.spring.ws
+com.intellij.struts2
+com.intellij.tapestry
+com.intellij.tasks
+com.intellij.tcserver
+com.intellij.uiDesigner
+com.intellij.velocity
+com.jetbrains.jarFinder
+com.jetbrains.php
+com.jetbrains.php.framework
+com.jetbrains.plugins.asp
+com.jetbrains.plugins.webDeployment
+hg4idea
+org.coffeescript
+org.intellij.grails
+org.intellij.groovy
+org.intellij.intelliLang
+org.jetbrains.android
+org.jetbrains.idea.eclipse
+org.jetbrains.idea.maven.ext
+org.jetbrains.kotlin
+org.jetbrains.plugins.django-db-config
+org.jetbrains.plugins.github
+org.jetbrains.plugins.gradle
+org.jetbrains.plugins.haml
+org.jetbrains.plugins.less
+org.jetbrains.plugins.ruby
+org.jetbrains.plugins.sass
+org.jetbrains.plugins.yaml
\ No newline at end of file