Alexander Lapin created IGNITE-15412:
----------------------------------------
Summary: 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: Ivan Bessonov
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)