Hi all,
Last night on IRC we were discussing the curious case of lib389. I think
this is a discussion we should have at some point.
The question really boils down to - "is lib389 a seperate project? Or is
it part of 389-ds-base?"
There are some pros and cons to both view points.
lib389 is a python library that exposes high level interactions with 389
directory server. This is done by making various calls via LDAP to the
server.
The issue is that we have a split: we have tests in
389-ds-base/dirsrvtests that are often *version* dependent. They relate
to features of the server, or issues in specific versions of the server
that may not exist in older versions. Today we kind of stradle the line
of "it's a bit of both". We have tests in 389-ds-base that depend on
versions of lib389 - but lib389 moves quickly and has little ability to
distinguish 389-ds-base versions.
-- Merging lib389 to 389-ds-base
One proposal is to merge them. We would mix in lib389 and the
dirsrvtests into lib389 tests. It is often the case that lib389's
features are bound tightly to a version of directory server.
Pros:
* No need to separate version lib389 to ds. lib389 is guaranteed to work
with *that* version of DS
* Testing DS is guaranteed to work. Right now we have rapid change in
lib389 and the tests in say 1.3.5 or 1.2.11.x are unlikely to work with
latest lib389.
* We can tightly tie in features of DS with lib389 and their
administration (ie no need to worry about backward compatibility).
* Simpler release process - we only need to release 389-ds-base, and we
are done.
* No more split patches for lib389 features and tests.
Cons:
* We will need to backport lib389 features to backport tests for fixes
to older versions.
* Inability for latest lib389 to manage older (or newer) versions of ds.
-- Separate lib389
We have lib389 as a project that moves at a different rate to the
389-ds-base project.
Pros:
* lib389 is able to use it's "knowledge" to administer *multiple*
versions of Directory Server, rather that singly linked ones.
* We can write tests into lib389 once and test them against all DS
versions, or just relevant versions.
* We can have the admin tools manage many versions of the software which
may be cross platform/distro.
* No more split patches for lib389 features and tests.
Cons:
* Need to invest time into version detection of the 389-ds-base package
for configuration (both local and remote). IE we add a plugin in 1.3.7,
but we need to know if lib389 is accessing 1.3.6 (and disallow the
change).
* Continue to manage separate release of software.
* Need to manage lib389's older versions operating against *newer*
389-ds-base versions. This adds a lot of complexity and version checks
(potentially with some server awareness?)
-- Do nothing
This is the current status.
Pros:
* We don't spend any time on the issue at all.
Cons:
* We get the worst of both worlds.
* Continue to increase complexity as these diverge.
* we often see the need to expand lib389 to express a test in
389-ds-base, so we will continue to need to split patches
============================
My vote is to merge them. I came to this decision because I believe that
this will make development against multiple branches easier with regard
to testing and backport of patches. For example, we'll know that lib389
that's inside of 1.3.7 will *always* work with that release, even if we
have improved in 1.4.x etc.
We also are developing new CLI and admin tools, and these are often
tightly linked to a version of Directory Server. I think that it's
easier for us as developers to have this specific linking, than trying
to spend large amounts of time making something generic that works for
all versions.
For example, this would make the CI workflow much simpler as we just get
"389-ds-base" and it's a self contained test suite and admin system. No
need to get the "matching pairs" as the separate workflow would require.
Thanks, I look forward to the discussion and various inputs to the this
topic.
--
Sincerely,
William Brown
Software Engineer
Red Hat, Australia/Brisbane