wiki:Obsolete/Development/Code/PerlNamespaces

Quattor-specific Perl Namespaces

Current State

As of early 2009, the various Quattor tools use the following PERL namespaces for modules:

EDG::WP4::CCM:: The namespace used for accessing the locally installed configuration profile (whether it's for the local node, or downloaded in order to discover configuration of a foreign node).

NCM:: Utility libraries used by dispatcher components, and by the dispatcher itself. Under this namespace is a subnamespace "Components" - all quattor ncm components are accessed via this namespace. For example, NCM::Component::filecopy is the namespace used by the "filecopy" component.

NCD:: For the Node Configuration Dispatcher. Only used by the dispatcher itself.

SPM:: For SPMA. Note that the perl namespace is only "SPM" and not "SPMA".

CAF:: The Common Application Framework

LC:: Lionel Cons' utilities for interacting with the system with extra caution. Used/wrapped extensively by the CAF toolset.

Proposal

  • All quattor specific modules should move to a new Quattor:: namespace.
  • The "CCM" acronym can be renamed as "Profile".
  • The NCM and NCD namespaces could be merged.
  • The CAF namespace should be merged into the Quattor toplevel namespace. In other words, "perl-CAF" package should become "perl-Quattor", since it provides the base libraries for driving Quattor.
  • The LC package should be included within CAF/perl-Quattor. An explicit fork of the LC codebase.

This would give the following mapping:

From To Examples
EDG::WP4::CCM:: Quattor::Profile:: Quattor::Profile::Element, Quattor::Profile::CacheManager
NCM:: Quattor::Config:: Quattor::Config::Component::filecopy, Quattor::Config::Check::File
NCD:: Quattor::Config:: Quattor::Config::ComponentProxy
SPM:: Quattor::SPMA:: Quattor::SPMA::Package
CAF:: Quattor:: Quattor::Lock, Quattor::Log, Quattor::Process, Quattor::Reporter, etc.
LC:: Quattor:: Quattor::Check, Quattor::File, Quattor::Stat

Implementation Plan

This involves changing almost every bit of perl there is.

SPMA

This can be changed at any time. The library is purely used by the "spma" tool itself.

EDG::WP4::CCM, a.k.a. the 'ccm' tools

The EDG::WP4::CCM:: namespace is defined by the "ccm" package and consumed by "ncm-query", "ncm-ncd", "aii" and some of the components, therefore care must be taken in changing this namespace. Possibly the trampoline mechanism described below could be used.

Components

Significantly, every component places itself into the namespace with a header that says something along the lines of "package NCM::Component::@COMP@". Therefore, the dispatcher (ncm-ncd) needs to support *both* namespaces (with a priority ordering biased towards the new name). Since the namespace is only used within ncm-ncd, this means that ncm-ncd has to be changed first before any components. From that point on, components can change at whatever pace they want.

Namespace Compatibility Mechanism

You can make a compatability later by playing tricks like the following:

 package EDG::WP4::CCM::Element;
 use base 'Quattor::Legacy::Factory';

Where the legacy factory looks like:

 package Quattor::Legacy::Factory;
 use Carp; 
 our $mapping = {
     "EDG::WP4::CCM" => "Quattor::Profile",
 };
 sub new {
     my ($class) = shift;
     if (ref $class) {
         return $class->SUPER::new(@_);
     }
     # find the best match in the mapping
     my $best  = ""
     foreach my $maybe (%$mapping) {
         if ($class =~ /^$maybe/ && length($class) > $best) {
             $best = $maybe;
         }
     }
     if (!$best) {
         Carp::confess("legacy support requested for $class, which is unsupported");
     }
     my $final = $mapping->{$best};
     if ($class =~ /${best}::(.*)/)) {
         $final .= "::$1";
     }
     print STDERR "WARNING: Quattor legacy code causing conversion of $class to $final\n";
     eval "require $final";
     if ($@) {
         Carp::confess("legacy support of $class failed: $@");
     }
     $final->new(@_);
 }

Concerns

Any code that uses the "isa()" method will need to be modified. The exception handling code within ncm-ncd might also need to change.

Last modified 13 years ago Last modified on Jun 7, 2011, 12:27:04 PM