Anton, Maxim,

Are we planning to release the views as part of 2.8? Don't see them listed
in the important features section:
https://cwiki.apache.org/confluence/display/IGNITE/Apache+Ignite+2.8#ApacheIgnite2.8-Themostimportantreleasetasks

-
Denis


On Wed, Feb 14, 2018 at 1:49 AM Anton Vinogradov <avinogra...@gridgain.com>
wrote:

> Vova,
>
> Could you confirm https://issues.apache.org/jira/browse/IGNITE-7527 ready
> to be merged?
>
> On Wed, Feb 14, 2018 at 12:01 PM, Vladimir Ozerov <voze...@gridgain.com>
> wrote:
>
> > I would start with NODES and NODE_ATTRIBUTES as the most simple thing.
> >
> > On Tue, Feb 13, 2018 at 4:10 AM, Denis Magda <dma...@apache.org> wrote:
> >
> > > Alex P, sounds like a good plan for me.
> > >
> > > Vladimir, do you have any suggestions or corrections?
> > >
> > > —
> > > Denis
> > >
> > > > On Feb 12, 2018, at 4:57 AM, Alex Plehanov <plehanov.a...@gmail.com>
> > > wrote:
> > > >
> > > > The views engine and the first view are almost ready to merge (review
> > > > comments are resolved). Which views should we take next? My proposal
> -
> > > > NODES, NODE_ATTRIBUTES, NODE_METRICS, NODE_HOSTS and NODE_ADDRESSES,
> > > since
> > > > these views are clear and all topology data available on each node.
> > > > Any objections?
> > > >
> > > > 2018-01-25 16:27 GMT+03:00 Alex Plehanov <plehanov.a...@gmail.com>:
> > > >
> > > >> Anton, Vladimir, I've made some fixes. There is only one view left
> and
> > > >> it's renamed to 'IGNITE.LOCAL_TRANSACTIONS'.
> > > >>
> > > >> High level design of solution:
> > > >> When IgniteH2Indexing is starting, it create and start
> > > >> new GridH2SysViewProcessor, which create and register in H2 (via its
> > own
> > > >> table engine) all implementations of system views. Each system view
> > > >> implementation extends base abstract class GridH2SysView. View
> > > >> implementation describes columns, their types and indexes in
> > constructor
> > > >> and must override method getRows for data retrieval (this method
> > called
> > > by
> > > >> H2-compatible table and index implementations for ignite system
> > views).
> > > >> Almost no fixes to existing parsing engine was made, except some
> > places,
> > > >> where GridH2Table instance was expected, but for system views there
> is
> > > >> another class.
> > > >>
> > > >> New PR: [1].  Please have a look.
> > > >>
> > > >> [1] https://github.com/apache/ignite/pull/3433
> > > >>
> > > >> 2018-01-24 19:12 GMT+03:00 Anton Vinogradov <
> avinogra...@gridgain.com
> > >:
> > > >>
> > > >>> I've created IEP-13 [1] to cover all cases.
> > > >>> Feel free to create issues.
> > > >>>
> > > >>> [1]
> > > >>> https://cwiki.apache.org/confluence/pages/viewpage.
> > > action?pageId=75962769
> > > >>>
> > > >>> On Wed, Jan 24, 2018 at 6:10 PM, Vladimir Ozerov <
> > voze...@gridgain.com
> > > >
> > > >>> wrote:
> > > >>>
> > > >>>> Let's start with a single and the most simple view, e.g.
> > > >>>> LOCAL_TRANSACTIONS. We will review and merge it along with
> necessary
> > > >>>> infrastructure. Then will handle the rest view in separate tickets
> > and
> > > >>>> separate focused discussions.
> > > >>>>
> > > >>>> On Wed, Jan 24, 2018 at 5:29 PM, Alex Plehanov <
> > > plehanov.a...@gmail.com
> > > >>>>
> > > >>>> wrote:
> > > >>>>
> > > >>>>> 1) It’s not a principal point, I can change schema. The
> > > >>>> INFORMATION_SCHEMA
> > > >>>>> was used because it’s already exists and usually used for
> metadata
> > > >>> tables
> > > >>>>> and views. Your proposal is to use schema “IGNITE”, am I
> understand
> > > >>> you
> > > >>>>> right? BTW, for now, we can’t query another (H2) meta tables from
> > the
> > > >>>>> INFORMATION_SCHEMA, so, “Ignite system views” is only available
> > views
> > > >>> to
> > > >>>>> query from this schema.
> > > >>>>> 2) Exactly for this reason the IGNITE_INSTANCE view is useful: to
> > > >>>> determine
> > > >>>>> which node we are connected to.
> > > >>>>> 3) As the first phase, in my opinion, local views will be enough.
> > > >>>>> Performance and caching of distributed views should be discussed
> at
> > > >>> next
> > > >>>>> phases, when distributed views implementation will be planned. In
> > > >>> current
> > > >>>>> implementation I tried to use indexing for local views wherever
> > it’s
> > > >>>>> possible.
> > > >>>>> 4) I don’t think, that JVM info is more critical information
> than,
> > > for
> > > >>>>> example, caches or nodes information. When authorization
> > capabilities
> > > >>>>> planned to implement?
> > > >>>>>
> > > >>>>> About local data: yes, we can rename all currently implemented
> > views
> > > >>> for
> > > >>>>> the local node data as LOCAL_..., and create (someday) new whole
> > > >>> cluster
> > > >>>>> views (which use distributed requests) without prefix or, for
> > > example,
> > > >>>> with
> > > >>>>> CLUSTER_ prefix. But some views can show all cluster information
> > > using
> > > >>>> only
> > > >>>>> local node data, without distributed requests (for example
> > > >>>>> IGNITE_NODE_METRICS, IGNITE_PART_ASSIGNMENT,
> > IGNITE_PART_ALLOCATION,
> > > >>>>> IGNITE_NODES, etc). Are they local or cluster views in this
> > concept?
> > > >>>> Which
> > > >>>>> prefix should be used? And what about caches? Are they local or
> > > >>> cluster?
> > > >>>> On
> > > >>>>> local node we can see cluster wide caches (replicated and
> > > distributed)
> > > >>>> and
> > > >>>>> caches for current node only. Local caches list may differ from
> > node
> > > >>> to
> > > >>>>> node. Which prefix should be used for this view? And one more,
> > there
> > > >>> is
> > > >>>> no
> > > >>>>> sense for some views to make them cluster wide (for example
> > > >>>>> INGNITE_INSTANCE). Should we name it LOCAL_INSTANCE without
> > creating
> > > >>>>> INSTANCE view?
> > > >>>>>
> > > >>>>> So, next steps: split PR, change schema name (IGNITE?), change
> view
> > > >>> name
> > > >>>>> for caches (CACHES, LOCAL_CACHES?)
> > > >>>>>
> > > >>>>>
> > > >>>>> 2018-01-24 13:03 GMT+03:00 Vladimir Ozerov <voze...@gridgain.com
> >:
> > > >>>>>
> > > >>>>>> Hi Alex,
> > > >>>>>>
> > > >>>>>> System views could be extremely valuable addition for Ignite.
> > > >>> Ideally,
> > > >>>>> user
> > > >>>>>> should be able to monitor and manage state of the whole cluster
> > > >>> with a
> > > >>>>>> single SQL command line. We have plans to implement it for a
> very
> > > >>> long
> > > >>>>>> time. However, this is very sensitive task which should take a
> lot
> > > >>> of
> > > >>>>>> moving pieces in count, such as usability, consistency,
> > performance,
> > > >>>>>> security, etc..
> > > >>>>>>
> > > >>>>>> Let me point several major concerns I see at the moment:
> > > >>>>>>
> > > >>>>>> 1) Usability: INFORMATION_SCHEMA
> > > >>>>>> This schema is part of SQL ANSI standard. When creating system
> > > >>> views,
> > > >>>>> some
> > > >>>>>> vendors prefer to store them in completely different predefined
> > > >>> schema
> > > >>>>>> (Oracle, MS SQL). Others prefer to keep them in
> INFORMATION_SCHEMA
> > > >>>>>> directly. Both approaches could work. However, the latter breaks
> > > >>>>> separation
> > > >>>>>> of concerns - we store typical metadata near to possibly
> sensitive
> > > >>>> system
> > > >>>>>> data. Also it makes security management more complex - system
> data
> > > >>> is
> > > >>>>> very
> > > >>>>>> sensitive, and now we cannot simply grant access
> > > >>> INFORMATIONAL_SCHEMA
> > > >>>> to
> > > >>>>>> user. Instead, we have to grant that access on per-view basis.
> For
> > > >>> this
> > > >>>>>> reason my preference is to store system tables in separate
> schema,
> > > >>> not
> > > >>>> in
> > > >>>>>> INFORMATION_SCHEMA
> > > >>>>>>
> > > >>>>>> 2) Consistency: local data
> > > >>>>>> One of implemented view GridH2SysViewImplInstance. Normally SQL
> > > >>> users
> > > >>>>>> communicate with Ignite through JDBC/ODBC drivers. These drivers
> > are
> > > >>>>>> connected to a single node, typically client node. Moreover, we
> > will
> > > >>>>>> introduce high-availability feature when drivers were able to
> > > >>> connect
> > > >>>> to
> > > >>>>>> any address from a predefined list. It renders this view
> useless,
> > as
> > > >>>> you
> > > >>>>> do
> > > >>>>>> not know which node you connected to. Also, local-only data
> cannot
> > > >>> be
> > > >>>>>> joined in general case - you will receive different results on
> > > >>>> different
> > > >>>>>> nodes. The same goes for transactions, JVM info, etc.
> > > >>>>>>
> > > >>>>>> 3) Performance
> > > >>>>>> Suppose we fixed consistency of transactions and now this view
> > shows
> > > >>>>>> transactions in the whole cluster with possibility to filter
> them
> > by
> > > >>>>> nodes
> > > >>>>>> - this is what user would expect out of the box. Another problem
> > > >>>> appears
> > > >>>>>> then - performance. How would we collect necessary data? How
> would
> > > >>> we
> > > >>>>>> handle joins, when particular view could be scanned multiple
> times
> > > >>>> during
> > > >>>>>> query execution? How we achieve sensible consistency? Most
> > probably
> > > >>> we
> > > >>>>>> would collect remote data once when query is started, cache it
> > > >>> somehow
> > > >>>> on
> > > >>>>>> query session level, and then re-use during joins. But again,
> this
> > > >>>> should
> > > >>>>>> be discussed separately.
> > > >>>>>>
> > > >>>>>> 4) Security: JVM info
> > > >>>>>> We should define clear boundaries of what info is exposed. JVM
> > data
> > > >>>> along
> > > >>>>>> with running threads is critically sensitive information. We
> > should
> > > >>> not
> > > >>>>>> expose it until we have authorization capabilities.
> > > >>>>>>
> > > >>>>>> In order to start moving this code from prototype to production
> > > >>> state
> > > >>>> we
> > > >>>>>> should start with the most simple and consistent views. E.g.
> > > >>>>> IGNITE_CACHES.
> > > >>>>>> Let's move it to a separate PR, review infrastructure code,
> review
> > > >>> view
> > > >>>>>> implementation, agree on proper naming and placement, and merge
> > it.
> > > >>>> Then
> > > >>>>>> each and every view (or group of related views) should be
> > discussed
> > > >>> and
> > > >>>>>> reviewed separately.
> > > >>>>>>
> > > >>>>>> As far as node-local stuff, may be we should move it to a
> separate
> > > >>>>> schema,
> > > >>>>>> or mark with special prefix. E.g. "IGNITE.TRANSACTIONS" - all
> > > >>>>> transactions
> > > >>>>>> in the cluster, "IGNITE.LOCAL_TRANSACTIONS" - transactions on
> the
> > > >>> local
> > > >>>>>> node. In this case we will be able to merge "local" stuff
> shortly,
> > > >>> and
> > > >>>>>> implement more complex but at the same time much more useful
> > > >>>> distributed
> > > >>>>>> stuff later on.
> > > >>>>>>
> > > >>>>>> Makes sense?
> > > >>>>>>
> > > >>>>>> Vladimir.
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> On Tue, Jan 23, 2018 at 8:30 PM, Alex Plehanov <
> > > >>>> plehanov.a...@gmail.com>
> > > >>>>>> wrote:
> > > >>>>>>
> > > >>>>>>> Hello, Igniters!
> > > >>>>>>>
> > > >>>>>>> For Ignite diagnostic usually it’s helpful to get some Ignite
> > > >>>> internals
> > > >>>>>>> information. But currently, in my opinion, there are no
> > convenient
> > > >>>>> tools
> > > >>>>>>> for this purpose:
> > > >>>>>>>
> > > >>>>>>> ·        Some issues can be solved by analyzing log files. Log
> > > >>> files
> > > >>>>> are
> > > >>>>>>> useful for dumps, but sometimes they are difficult to read.
> Also
> > > >>>>>>> interesting metrics can’t be received runtime by request, we
> need
> > > >>> to
> > > >>>>> wait
> > > >>>>>>> until Ignite will write these metrics by timeout or other
> events.
> > > >>>>>>>
> > > >>>>>>> ·        JMX is useful for scalar metrics. Complex and table
> data
> > > >>> can
> > > >>>>>> also
> > > >>>>>>> be received, but it’s difficult to read, filter and sort them
> > > >>> without
> > > >>>>>>> processing by specialized external tools. For most frequently
> > used
> > > >>>>> cases
> > > >>>>>>> almost duplicating metrics are created to show data in an
> > > >>>> easy-to-read
> > > >>>>>>> form.
> > > >>>>>>>
> > > >>>>>>> ·        Web-console is able to show table and complex data.
> > > >>> Perhaps,
> > > >>>>>>> someday  web-console will contain all necessary dashboards for
> > > >>> most
> > > >>>>>> problem
> > > >>>>>>> investigation, but some non-trivial queries will not be covered
> > > >>>> anyway.
> > > >>>>>>> Also web-console needs additional infrastructure to work.
> > > >>>>>>>
> > > >>>>>>> ·        External “home-made” tools can be used for non-trivial
> > > >>>> cases.
> > > >>>>>> They
> > > >>>>>>> cover highly specialized cases and usually can’t be used as
> > > >>> general
> > > >>>>>> purpose
> > > >>>>>>> tools.
> > > >>>>>>>
> > > >>>>>>> Sometimes we are forced to use more than one tool and join data
> > by
> > > >>>>> hands
> > > >>>>>>> (for example, current thread dump and data from logs).
> > > >>>>>>>
> > > >>>>>>> Often RDBMS for diagnostic purposes provides system views (for
> > > >>>> example,
> > > >>>>>>> DBA_% and V$% in Oracle), which can be queried by SQL. This
> > > >>> solution
> > > >>>>>> makes
> > > >>>>>>> all internal diagnostic information available in a readable
> form
> > > >>>> (with
> > > >>>>>> all
> > > >>>>>>> possible filters and projections) without using any other
> > > >>> internal or
> > > >>>>>>> external tools. My proposal is to create similar system views
> in
> > > >>>>> Ignite.
> > > >>>>>>>
> > > >>>>>>> I implement working prototype (PR: [1]). It contains views:
> > > >>>>>>>
> > > >>>>>>> IGNITE_SYSTEM_VIEWS
> > > >>>>>>>
> > > >>>>>>> Registered system views
> > > >>>>>>>
> > > >>>>>>> IGNITE_INSTANCE
> > > >>>>>>>
> > > >>>>>>> Ignite instance
> > > >>>>>>>
> > > >>>>>>> IGNITE_JVM_THREADS
> > > >>>>>>>
> > > >>>>>>> JVM threads
> > > >>>>>>>
> > > >>>>>>> IGNITE_JVM_RUNTIME
> > > >>>>>>>
> > > >>>>>>> JVM runtime
> > > >>>>>>>
> > > >>>>>>> IGNITE_JVM_OS
> > > >>>>>>>
> > > >>>>>>> JVM operating system
> > > >>>>>>>
> > > >>>>>>> IGNITE_CACHES
> > > >>>>>>>
> > > >>>>>>> Ignite caches
> > > >>>>>>>
> > > >>>>>>> IGNITE_CACHE_CLUSTER_METRICS
> > > >>>>>>>
> > > >>>>>>> Ignite cache cluster metrics
> > > >>>>>>>
> > > >>>>>>> IGNITE_CACHE_NODE_METRICS
> > > >>>>>>>
> > > >>>>>>> Ignite cache node metrics
> > > >>>>>>>
> > > >>>>>>> IGNITE_CACHE_GROUPS
> > > >>>>>>>
> > > >>>>>>> Cache groups
> > > >>>>>>>
> > > >>>>>>> IGNITE_NODES
> > > >>>>>>>
> > > >>>>>>> Nodes in topology
> > > >>>>>>>
> > > >>>>>>> IGNITE_NODE_HOSTS
> > > >>>>>>>
> > > >>>>>>> Node hosts
> > > >>>>>>>
> > > >>>>>>> IGNITE_NODE_ADDRESSES
> > > >>>>>>>
> > > >>>>>>> Node addresses
> > > >>>>>>>
> > > >>>>>>> IGNITE_NODE_ATTRIBUTES
> > > >>>>>>>
> > > >>>>>>> Node attributes
> > > >>>>>>>
> > > >>>>>>> IGNITE_NODE_METRICS
> > > >>>>>>>
> > > >>>>>>> Node metrics
> > > >>>>>>>
> > > >>>>>>> IGNITE_TRANSACTIONS
> > > >>>>>>>
> > > >>>>>>> Active transactions
> > > >>>>>>>
> > > >>>>>>> IGNITE_TRANSACTION_ENTRIES
> > > >>>>>>>
> > > >>>>>>> Cache entries used by transaction
> > > >>>>>>>
> > > >>>>>>> IGNITE_TASKS
> > > >>>>>>>
> > > >>>>>>> Active tasks
> > > >>>>>>>
> > > >>>>>>> IGNITE_PART_ASSIGNMENT
> > > >>>>>>>
> > > >>>>>>> Partition assignment map
> > > >>>>>>>
> > > >>>>>>> IGNITE_PART_ALLOCATION
> > > >>>>>>>
> > > >>>>>>> Partition allocation map
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> There are much more useful views can be implemented (executors
> > > >>>>>> diagnostic,
> > > >>>>>>> SPIs diagnostic, etc).
> > > >>>>>>>
> > > >>>>>>> Some usage examples:
> > > >>>>>>>
> > > >>>>>>> Cache groups and their partitions, which used by transaction
> more
> > > >>>> than
> > > >>>>> 5
> > > >>>>>>> minutes long:
> > > >>>>>>>
> > > >>>>>>> SELECT cg.CACHE_OR_GROUP_NAME, te.KEY_PARTITION, count(*) AS
> > > >>>>> ENTITIES_CNT
> > > >>>>>>> FROM INFORMATION_SCHEMA.IGNITE_TRANSACTIONS t
> > > >>>>>>> JOIN INFORMATION_SCHEMA.IGNITE_TRANSACTION_ENTRIES te ON t.XID
> =
> > > >>>>> te.XID
> > > >>>>>>> JOIN INFORMATION_SCHEMA.IGNITE_CACHES c ON te.CACHE_NAME =
> > c.NAME
> > > >>>>>>> JOIN INFORMATION_SCHEMA.IGNITE_CACHE_GROUPS cg ON c.GROUP_ID =
> > > >>> cg.ID
> > > >>>>>>> WHERE t.START_TIME < TIMESTAMPADD('MINUTE', -5, NOW())
> > > >>>>>>> GROUP BY cg.CACHE_OR_GROUP_NAME, te.KEY_PARTITION
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> Average CPU load on server nodes grouped by operating system:
> > > >>>>>>>
> > > >>>>>>> SELECT na.VALUE, COUNT(n.ID), AVG(nm.AVG_CPU_LOAD) AVG_CPU_LOAD
> > > >>>>>>> FROM INFORMATION_SCHEMA.IGNITE_NODES n
> > > >>>>>>> JOIN INFORMATION_SCHEMA.IGNITE_NODE_ATTRIBUTES na ON na.NODE_ID
> > =
> > > >>>> n.ID
> > > >>>>>> AND
> > > >>>>>>> na.NAME = 'os.name'
> > > >>>>>>> JOIN INFORMATION_SCHEMA.IGNITE_NODE_METRICS nm ON nm.NODE_ID =
> > > >>> n.ID
> > > >>>>>>> WHERE n.IS_CLIENT = false
> > > >>>>>>> GROUP BY na.VALUE
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> Top 5 nodes by puts to cache ‘cache’:
> > > >>>>>>>
> > > >>>>>>> SELECT cm.NODE_ID, cm.CACHE_PUTS FROM
> > > >>>>>>> INFORMATION_SCHEMA.IGNITE_CACHE_NODE_METRICS cm
> > > >>>>>>> WHERE cm.CACHE_NAME = 'cache'
> > > >>>>>>> ORDER BY cm.CACHE_PUTS DESC
> > > >>>>>>> LIMIT 5
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>>
> > > >>>>>>> Does this implementation interesting to someone else? Maybe any
> > > >>> views
> > > >>>>> are
> > > >>>>>>> redundant? Which additional first-priority views must be
> > > >>> implemented?
> > > >>>>> Any
> > > >>>>>>> other thoughts or proposal?
> > > >>>>>>>
> > > >>>>>>> [1] https://github.com/apache/ignite/pull/3413
> > > >>>>>>>
> > > >>>>>>
> > > >>>>>
> > > >>>>
> > > >>>
> > > >>
> > > >>
> > >
> > >
> >
>

Reply via email to