On Sun, 2 Aug 2009, Ralph Castain wrote:

Perhaps a bigger question needs to be addressed - namely, does the ob1 code need to be refactored?

Having been involved a little in the early discussion with bull when we debated over where to put this, I know the primary concern was that the code not suffer the same fate as the dr module. We have since run into a similar issue with the checksum module, so I know where they are coming from.

The problem is that the code base is adjusted to support changes in ob1, which is still being debugged. On the order of 95% of the code in ob1 is required to be common across all the pml modules, so the rest of us have to (a) watch carefully all the commits to see if someone touches ob1, and then (b) manually mirror the change in our modules.

This is not a supportable model over the long-term, which is why dr has died, and checksum is considering integrating into ob1 using configure #if's to avoid impacting non-checksum users. Likewise, device failover has been treated similarly here - i.e., configure out the added code unless someone wants it.

This -does- lead to messier source code with these #if's in it. If we can refactor the ob1 code so the common functionality resides in the base, then perhaps we can avoid this problem.

Is it possible?

I think Ralph raises a good point - we need to think about how to allow better use of OB1's code base between consumers like checksum and failover. The current situation is problematic to me, for the reasons Ralph cited. However, since the ob1 structures and code have little use for PMLs such as CM, I'd rather not push the code into the base - in the end, it's very specific to a particular PML implementation and the code pushed into the base already made things much more interesting in implementing CM than I would have liked. DR is different in this conversation, as it was almost entirely a seperate implementation from ob1 by the end, due to the removal of many features and the addition of many others.

However, I think there's middle ground here which could greatly improve the current situation. With the proper refactoring, there's no technical reason why we couldn't move the checksum functionality into ob1 and add the failover to ob1, with no impact on performance when the functionality isn't used and little impact on code readability.

So, in summary, refactor OB1 to support checksum / failover good, pushing ob1 code into base bad.

Brian

Reply via email to