[Freeipa-devel] [PATCH] manage replication topology in the shared tree
thierry bordaz
tbordaz at redhat.com
Mon Apr 27 08:18:14 UTC 2015
On 04/21/2015 10:49 AM, Ludwig Krispenz wrote:
>
> On 04/20/2015 06:00 PM, thierry bordaz wrote:
>> On 04/13/2015 10:56 AM, Ludwig Krispenz wrote:
>>> Hi,
>>>
>>> in the attachment you find the latest state of the "topology
>>> plugin", it implements what is defined in the design page:
>>> http://www.freeipa.org/page/V4/Manage_replication_topology (which is
>>> also waiting for a reviewer)
>>>
>>> It contains the plugin itself and a core of ipa commands to manage
>>> a topology. to be really applicable, some work outside is required,
>>> eg the management of the domain level and a decision where the
>>> binddn group should be maintained.
>>>
>>> Thanks,
>>> Ludwig
>>>
>>>
>> Hello Ludwig,
>>
>> Quite long review to do. So far I only looked at the startup phase
>> and I have only few questions and comments.
> Thanks for your time, and I'm looking forward to your review of the
> other parts, you raise some valid points.
> I'll try to answer some of them inline, but will integrate some into a
> next version of the patch
>>
>> In ipa_topo_start, do you need to get argc/argv as you are not using
>> plugin-argxx attributes ?
> no. It was a leftover from a "standard" plugin
>>
>>
>> topo_plugin_conf configuration parameters are not freed when the
>> plugin is closed. Is it closed only at shutdown ?
>> Also I would initiatlize it to {NULL}.
> So far it is not planned to be dynamic, but I will addres the memory
> management
>>
>> In case the config does not contain any
>> nsslapd-topo-plugin-shared-replica-root, I wonder if
>> ipa_topo_apply_shared_config may crash as shared_replica_root will be
>> NULL.
>> or at least in
>> ipa_topo_apply_shared_replica_config/ipa_topo_util_get_replica_conf.
>>
>> Also if nsslapd-topo-plugin-shared-replica-root contains an invalid
>> root suffix (typo), topoRepl remains NULL and
>> ipa_topo_util_get_replica_conf/ipa_topo_cfg_replica_add can crash.
> for the two comments above, I was assuming that plugin conf and shared
> tree would be setup by ipa tools and server setup, so assuming only
> valid data, but you are right, checking for bad data doesn't hurt.
>>
>> In ipa_topo_util_segment_from_entry, if the config entry has no
>> direction/left/right it will crash. Shouldn't it return an error if
>> the config is invalid.
> adding a segment should be done with the ipa command 'ipa
> topologysegment-add ...' and this always provides a direction (param
> or default). If you try to add a segment directly, direction is a
> required attribute of teh segment objectclass, so it should be rejected-
>>
>> The update of domainLevel may start the plugin. If two mods update
>> the domainLevel they could be done in parallele.
> yes :-(
>>
>>
>> In ipa_topo_util_update_agmt_list, if there is a marked agmnt but no
>> segment it deletes the agreement.
>> Is it possible there is a segment but no agmnt ? For example, if the
>> server were stopped or crashed after the segment was created but
>> before the local config was updated.
> then it should be created from the segment
>>
>>
>> Hosts are taken from shared config tree (cn=masters,<cfg>), is it
>> possible to have a replica agreement to a host that is not under
>> 'cn=masters,<cfg>'
> yes, it will be ignored by the plugin
>>
>>
>> thanks
>> thierry
>>
>
Hi Ludwig,
I continued the review of the design/topology plugin code. This is
really an interesting plugin but unfortunately I have not yet reviewed
all the parts.
I went through the design and digging the related parts in the code. So
far I need to review the rest starting at
http://www.freeipa.org/page/V4/Manage_replication_topology#connectivity_management.
I think I did ~50% design but may be more than 50% of the code.
Here are additional points:
in ipa_topo_set_domain_level, you may record the new Domain level
value as FATAL (it is already recorded in case of oneline import)
ipa_topo_be_state_change is called for any backend going online.
Domain level and start should be done only for a backend mapping a
shared-replica-root.
Also the plugin can be started many times (each online init),
ipa_topo_util_start is not protected by a lock
Some fields will leak (in ipa_topo_init_shared_config)
Also I wonder if you reinit several times the same replica-root, its
previous config will leak. (replica->repl_segments)
In ipa_topo_apply_shared_replica_config,
I do not see where replica_config is kept (leak ?)
ipa_topo_util_start/ipa_topo_apply_shared_config is called at
startup or during online-init.
For online-init, if the plugin was already active, what is the need
of calling ipa_topo_util_start ?
For online-init, It initializes all the replica-root. Could it init
only the reinitialized replic-root ?
in
http://www.freeipa.org/page/V4/Manage_replication_topology#shared_configuration:_database,
it mentions ipaReplTopoConfigMaster.
Is it implemented ?
in
http://www.freeipa.org/page/V4/Manage_replication_topology#shared_configuration:_segment,
what happens if a server under cn=masters is removed ?
in
http://www.freeipa.org/page/V4/Manage_replication_topology#shared_configuration:_example.
There is a segment cn=111_to_102. For example it was created by
vm-111 when topology plugin starts with 'dc=example,dc=com' .
What prevents vm-102 topology plugins to create the segment
cn=102_to_111 ?
in ipa_topo_post_mod.
Is it 100% that if we have 'cn=replica
example,cn=topology,dc=example,dc=com' then it exists the related
config in topo_shared_conf.replicas.
In ipa_topo_util_get_replica_conf, it is looking like the entry can
exist before the related config is added.
In that case when modifying a segment
ipa_topo_util_get_conf_for_segment will return 'tconf' config that
is not linked in topo_shared_conf.replicas tconf will leak and I am
unsure the post_mod is fully processed.
In ipa_topo_post_mod
in ipa_topo_util_segment_update if the
segment.ipaReplTopoSegmentDirection was "none" and MOD set it to
"both", segment->right/left are not set but it is said to be
bidirectional
ipaReplTopoSegmentStatus: can not find it in the design
in ipa_topo_util_existing_agmts_update, my understanding is that a
host only updates its local replica agreement.
So even if the segment update is replicated, others hosts will not
skip updates where ->origin is not themself.
I think you may add a comment about this as it looks an important thing.
Also I did not find this comment in the design but may be I missed it.
in ipa_topo_util_existing_agmts_update, it applies the mods on left
or on right. That means we do not support serveral instance on the
same machine. I also missed that point in the design.
in ipa_topo_agmt_mod, it does nothing when deleting a managed
attribute ?
in ipa_topo_agmt_mod, if update of the replica agreement fails
(ipa_topo_agreement_dn or ipa_topo_util_modify) you may log a message
in ipa_topo_agmt_mod, if the mod is not related to any managed
attribute, there is no replica agreement update but the 'dn' is not
freed.
in ipa_topo_post_mod, I do not see 'domainLevel' in the schema. Is
it stored in an extensible object ?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20150427/db837d6c/attachment.htm>
More information about the Freeipa-devel
mailing list