You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Aleksandr Polovtcev (Jira)" <ji...@apache.org> on 2021/09/03 14:51:00 UTC

[jira] [Assigned] (IGNITE-15412) Configuration registry: add ability to retreive distributed value

     [ https://issues.apache.org/jira/browse/IGNITE-15412?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Aleksandr Polovtcev reassigned IGNITE-15412:
--------------------------------------------

    Assignee: Aleksandr Polovtcev  (was: Ivan Bessonov)

> Configuration registry: add ability to retreive distributed value  
> -------------------------------------------------------------------
>
>                 Key: IGNITE-15412
>                 URL: https://issues.apache.org/jira/browse/IGNITE-15412
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Alexander Lapin
>            Assignee: Aleksandr Polovtcev
>            Priority: Major
>              Labels: iep-55, ignite-3
>
> In some cases it's required to retrieve configuration distributed value. Currently we use meta storage manager interface for this purpose and cause configuration registry hides the keys the code of the distributed property retrieval looks horrible:
>  
> {code:java}
> //TODO This is an egregious violation of encapsulation. Current approach has to be revisited.
> private Set<String> tableNamesConfigured() {
>     IgniteBiTuple<ByteArray, ByteArray> range = toRange(new ByteArray(PUBLIC_PREFIX));
>     Set<String> tableNames = new HashSet<>();
>     try (Cursor<Entry> cursor = metaStorageMgr.range(range.get1(), range.get2())) {
>         while (cursor.hasNext()) {
>             Entry entry = cursor.next();
>             List<String> keySplit = ConfigurationUtil.split(entry.key().toString());
>             if (keySplit.size() == 5 && NamedListNode.NAME.equals(keySplit.get(4)))
>                 tableNames.add(ByteUtils.fromBytes(entry.value()).toString());
>         }
>     }
>     catch (Exception e) {
>         LOG.error("Can't get table names.", e);
>     }
>     return tableNames;
> }
> {code}
> Let's refactor it by adding distributedValue() (concrete name of the method is up to an implementator) to ConfigurationProperty. That will allow to simplify distributed retrieval:
> {code:java}
> private Set<String> tableNamesConfigured() {
>     return new HashSet<>(clusterCfgMgr.configurationRegistry().getConfiguration(TablesConfiguration.KEY).tables().
>         distirbuteValue().namedListKeys());
> }
> {code}
> Internally distributedValue() should fetch corresponding key->val from the meta storage without applying this value to local state updating localRoots.version etc.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)