From 7b7d9ab67589afec1ba58cd5138154290c529c0e Mon Sep 17 00:00:00 2001 From: yangsong Date: Tue, 21 Aug 2018 18:38:08 +0800 Subject: [PATCH] merge master to 2.14 branch (#5546) * To fix issue that lose activation success log * update onie doc to add rspconfig sshcfg command (#5539) * fix osarch missing from copycds (#5543) * Modify release information for 2.14.3 release * update goconserver quickstart document * Enhancement for using site cache in plugin (#5535) * site cache when run plugin does not work very well - using cache from plugin when getNodesAttribs/getNodeAttribs (pass it into DB process from plugin process) - Site cache is a whole hash, so to use cache when by the hash is there, instead of the specified key is there. It is because that there might be no key defined in site table. * with XCATBYPASS, to populate site hash before scan_plugins. Then only 1 query for site table to do whole things. * cache site when init plugins on service nodes * missing to comment the old codes query from xCAT DB process --- .../advanced/goconserver/quickstart.rst | 20 ++++--- .../onie_switches/os_cumulus/install.rst | 2 +- docs/source/conf.py | 2 +- docs/source/overview/xcat2_release.rst | 8 ++- perl-xCAT/xCAT/Client.pm | 3 +- perl-xCAT/xCAT/Table.pm | 56 +++++++++++-------- perl-xCAT/xCAT/TableUtils.pm | 26 +++++---- xCAT-server/lib/xcat/plugins/onie.pm | 2 + xCAT-server/lib/xcat/plugins/openbmc.pm | 2 +- xCAT-server/lib/xcat/plugins/sles.pm | 1 - xCAT-server/lib/xcat/plugins/switch.pm | 9 ++- xCAT-server/sbin/xcatd | 4 ++ 12 files changed, 83 insertions(+), 52 deletions(-) diff --git a/docs/source/advanced/goconserver/quickstart.rst b/docs/source/advanced/goconserver/quickstart.rst index e53aa0ed6..bf4b873e9 100644 --- a/docs/source/advanced/goconserver/quickstart.rst +++ b/docs/source/advanced/goconserver/quickstart.rst @@ -1,25 +1,29 @@ Quickstart ========== -To enable ``goconserver`` +#. For refresh xCAT installation, run the command below to start and configure ``goconserver`` -#. For switching from ``conserver``, shall stop it first + makegocons - #. stop ``conserver`` + The new console logs will start logging to ``/var/log/consoles/.log`` + +#. For xCAT updating, and use ``conserver`` before, following the step below to enable ``goconserver`` + + #. stop ``conserver`` on management node systemctl stop conserver.service - #. (Optional) for service nodes: - - chdef -t group -o service setupconserver=2 + #. For hierarchical cluster, shall also stop ``conserver`` on **service nodes**, and config ``goconserver`` as console server: xdsh service 'systemctl stop conserver.service' -#. To start and configure ``goconserver`` + chdef -t group -o service setupconserver=2 + + #. start and configure ``goconserver`` makegocons - The new console logs will start logging to ``/var/log/consoles/.log`` + The new console logs will start logging to ``/var/log/consoles/.log`` #. To check the console status of nodes, use: diff --git a/docs/source/advanced/networks/onie_switches/os_cumulus/install.rst b/docs/source/advanced/networks/onie_switches/os_cumulus/install.rst index 4be0107b8..ca7dcdf76 100644 --- a/docs/source/advanced/networks/onie_switches/os_cumulus/install.rst +++ b/docs/source/advanced/networks/onie_switches/os_cumulus/install.rst @@ -86,7 +86,7 @@ To ease in the management of the switch, xCAT provides a script to help configur Execute the following to sync the xCAT keys to the switch: :: - /opt/xcat/share/xcat/scripts/configonie --switches frame01sw1 --ssh + rspconfig frame01sw1 sshcfg Validate the ssh keys are correctly configured by running a ``xdsh`` command: :: diff --git a/docs/source/conf.py b/docs/source/conf.py index 9592b9db5..4402d6d7f 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -59,7 +59,7 @@ author = u'IBM Corporation' # The short X.Y version. version = '2' # The full version, including alpha/beta/rc tags. -release = '2.14.2' +release = '2.14.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/source/overview/xcat2_release.rst b/docs/source/overview/xcat2_release.rst index dc55d75e0..486faf10e 100644 --- a/docs/source/overview/xcat2_release.rst +++ b/docs/source/overview/xcat2_release.rst @@ -14,8 +14,14 @@ xCAT 2.14.x |xCAT |New OS |New |New Feature | |Version | |Hardware | | +=================================+===============+=============+==================================+ -|| xCAT 2.14.2 2018/7/13 |- Ubuntu 18.04 | | | +|| xCAT 2.14.3 2018/8/24 |- SLES12.3 | |- OpenBMC rflash enhancement | || | | | | +| `2.14.3 Release Notes `_ | | |- goconserver v0.3.1 | ++---------------------------------+---------------+-------------+----------------------------------+ +|| xCAT 2.14.2 2018/7/13 |- Ubuntu 18.04 | | | +|| |- RHEL6.10 | | | | `2.14.2 Release Notes `_ | | | | diff --git a/perl-xCAT/xCAT/Client.pm b/perl-xCAT/xCAT/Client.pm index bc090c890..888c9242a 100644 --- a/perl-xCAT/xCAT/Client.pm +++ b/perl-xCAT/xCAT/Client.pm @@ -174,6 +174,7 @@ sub submit_request { # Load plugins from either specified or default dir require xCAT::Table; + populate_site_hash(); my %cmd_handlers; my @plugins_dirs = split('\:', $ENV{XCATBYPASS}); if (-d $plugins_dirs[0]) { @@ -192,8 +193,6 @@ sub submit_request { scan_plugins(); } - populate_site_hash(); - # don't do XML transformation -- assume request is well-formed # my $xmlreq=XMLout($request,RootName=>xcatrequest,NoAttr=>1,KeyAttr=>[]); # $request = XMLin($xmlreq,SuppressEmpty=>undef,ForceArray=>1) ; diff --git a/perl-xCAT/xCAT/Table.pm b/perl-xCAT/xCAT/Table.pm index 99bf2210c..103f8a09a 100644 --- a/perl-xCAT/xCAT/Table.pm +++ b/perl-xCAT/xCAT/Table.pm @@ -2312,10 +2312,6 @@ sub setNodesAttribs { #-------------------------------------------------------------------------------- sub getNodesAttribs { my $self = shift; - if ($dbworkerpid > 0) { - return dbc_call($self, 'getNodesAttribs', @_); - } - $self->trace_db(START_TYPE); my $nodelist = shift; unless ($nodelist) { $nodelist = []; } #common to be invoked with undef seemingly my %options = (); @@ -2326,6 +2322,21 @@ sub getNodesAttribs { } else { @attribs = @_; } + + if (!exists($options{hierarchy_attrs})) { + my @hierarchy_attrs = (); + my $hierarchy_field = xCAT::TableUtils->get_site_attribute("hierarchicalattrs"); + if ($hierarchy_field) { + @hierarchy_attrs = split(/,/, $hierarchy_field); + } + $options{hierarchy_attrs} = \@hierarchy_attrs; + } + + if ($dbworkerpid > 0) { + return dbc_call($self, 'getNodesAttribs', $nodelist, \@attribs, %options); + } + + $self->trace_db(START_TYPE); my @realattribs = @attribs; #store off the requester attribute list, the cached columns may end up being a superset and we shouldn't return more than asked #it should also be the case that cache will be used if it already is in play even if below cache threshold. This would be desired behavior if (scalar(@$nodelist) > $cachethreshold) { @@ -2348,12 +2359,12 @@ sub getNodesAttribs { $self->{nodelist}->{_use_cache} = 1; } my $rethash; - my @hierarchy_attrs = (); - my $hierarchy_field = xCAT::TableUtils->get_site_attribute("hierarchicalattrs"); - if ($hierarchy_field) { - @hierarchy_attrs = split(/,/, $hierarchy_field); - } - $options{hierarchy_attrs} = \@hierarchy_attrs; + #my @hierarchy_attrs = (); + #my $hierarchy_field = xCAT::TableUtils->get_site_attribute("hierarchicalattrs"); + #if ($hierarchy_field) { + # @hierarchy_attrs = split(/,/, $hierarchy_field); + #} + #$options{hierarchy_attrs} = \@hierarchy_attrs; foreach (@$nodelist) { my @nodeentries = $self->getNodeAttribs($_, \@realattribs, %options); $rethash->{$_} = \@nodeentries; #$self->getNodeAttribs($_,\@attribs); @@ -2732,20 +2743,10 @@ sub transRegexAttrs sub getNodeAttribs { my $self = shift; - if ($dbworkerpid > 0) { #TODO: should this be moved outside of the DB worker entirely? I'm thinking so, but I don't dare do so right now... - #the benefit would be the potentially computationally intensive substitution logic would be moved out and less time inside limited - #db worker scope - return dbc_call($self, 'getNodeAttribs', @_); - } - $self->trace_db(START_TYPE); - - if (!defined($self->{dbh})) { - xCAT::MsgUtils->message("S", "xcatd: DBI is missing, Please check the db access process."); - return undef; - } my $node = shift; - my @attribs; + my %options = (); + my @attribs; if (ref $_[0]) { @attribs = @{ shift() }; %options = @_; @@ -2761,6 +2762,17 @@ sub getNodeAttribs } $options{hierarchy_attrs} = \@hierarchy_attrs; } + if ($dbworkerpid > 0) { #TODO: should this be moved outside of the DB worker entirely? I'm thinking so, but I don't dare do so right now... + #the benefit would be the potentially computationally intensive substitution logic would be moved out and less time inside limited + #db worker scope + return dbc_call($self, 'getNodeAttribs', $node, \@attribs, %options); + } + $self->trace_db(START_TYPE); + + if (!defined($self->{dbh})) { + xCAT::MsgUtils->message("S", "xcatd: DBI is missing, Please check the db access process."); + return undef; + } my $datum; my $oldusecache; diff --git a/perl-xCAT/xCAT/TableUtils.pm b/perl-xCAT/xCAT/TableUtils.pm index 8fde01aa3..472a2aedc 100755 --- a/perl-xCAT/xCAT/TableUtils.pm +++ b/perl-xCAT/xCAT/TableUtils.pm @@ -1261,27 +1261,28 @@ sub getAppStatus get_site_attribute Arguments: - + $attribute -- the attribute you want to get + $dvalue -- Optional, the default string value if the attribute does not exist Returns: The value of the attribute requested from the site table - Globals: - none - Error: - undef - Example: - @attr=xCAT::TableUtils->get_site_attribute($attribute); - Comments: - none + Globals: + %::XCATSITEVALS + Error: + undef + Example: + @attr=xCAT::TableUtils->get_site_attribute($attribute); + Comments: + none =cut #------------------------------------------------------------------------ sub get_site_attribute { - my ($class, $attr) = @_; + my ($class, $attr, $dvalue) = @_; my $values; - if (defined($::XCATSITEVALS{$attr})) { + if (%::XCATSITEVALS) { $values = ($::XCATSITEVALS{$attr}); } else { my $sitetab = xCAT::Table->new('site'); @@ -1300,7 +1301,8 @@ sub get_site_attribute } } - return $values; + return $values if ( defined $values); + return $dvalue; } diff --git a/xCAT-server/lib/xcat/plugins/onie.pm b/xCAT-server/lib/xcat/plugins/onie.pm index 18c2f2919..817c4d8eb 100644 --- a/xCAT-server/lib/xcat/plugins/onie.pm +++ b/xCAT-server/lib/xcat/plugins/onie.pm @@ -107,6 +107,8 @@ sub process_request { my $subcmd = $exargs[0]; if ($subcmd eq 'sshcfg') { process_sshcfg($nodes, $callback); + } else { + xCAT::MsgUtils->message("I", { data => ["The rspconfig command $subcmd is not supported"] }, $callback); } } diff --git a/xCAT-server/lib/xcat/plugins/openbmc.pm b/xCAT-server/lib/xcat/plugins/openbmc.pm index 9cec2c352..10b11257c 100644 --- a/xCAT-server/lib/xcat/plugins/openbmc.pm +++ b/xCAT-server/lib/xcat/plugins/openbmc.pm @@ -4646,10 +4646,10 @@ sub rflash_response { $version_num ++; my $flash_success_msg = "$node: $firm_msg activation successful."; push @{ $rsp->{data} },$flash_success_msg; + print RFLASH_LOG_FILE_HANDLE "$flash_success_msg\n"; # Activation state of active and priority of 0 indicates the activation has been completed if ( $length == $version_num ) { xCAT::MsgUtils->message("I", $rsp, $callback) if ($rsp); - print RFLASH_LOG_FILE_HANDLE "$flash_success_msg\n"; $node_info{$node}{rst} = "$flash_success_msg"; if (!$::UPLOAD_ACTIVATE_STREAM) { $wait_node_num--; diff --git a/xCAT-server/lib/xcat/plugins/sles.pm b/xCAT-server/lib/xcat/plugins/sles.pm index e3fac8e27..7470483b1 100644 --- a/xCAT-server/lib/xcat/plugins/sles.pm +++ b/xCAT-server/lib/xcat/plugins/sles.pm @@ -1632,7 +1632,6 @@ sub copycd { my $dinfo; open($dinfo, $mntpath . "/content"); - my $darch; while (<$dinfo>) { if (m/^DEFAULTBASE\s+(\S+)/) diff --git a/xCAT-server/lib/xcat/plugins/switch.pm b/xCAT-server/lib/xcat/plugins/switch.pm index 1639b3be0..94b1ba96a 100644 --- a/xCAT-server/lib/xcat/plugins/switch.pm +++ b/xCAT-server/lib/xcat/plugins/switch.pm @@ -420,9 +420,12 @@ sub process_switch_config { xCAT::MellanoxIB::setConfig($nodes, $callback, $subreq, $subcommand, $argument); } } else { - my $rsp = {}; - $rsp->{error}->[0] = "The following '$t' switches are unsuppored:\n@$nodes"; - $callback->($rsp); + #onie switch will processed in the onie plug in + unless ($t =~ /onie/i) { + my $rsp = {}; + $rsp->{error}->[0] = "The following '$t' switches are not supported:\n@$nodes"; + $callback->($rsp); + } } } } diff --git a/xCAT-server/sbin/xcatd b/xCAT-server/sbin/xcatd index 7a037e2e1..b9729d12c 100755 --- a/xCAT-server/sbin/xcatd +++ b/xCAT-server/sbin/xcatd @@ -970,6 +970,10 @@ if (defined $pid_init) { %cmd_handlers = %{ fd_retrieve($readpipe) }; } else { $$progname = "xcatd: plugin initialization"; + if (xCAT::Utils->isServiceNode()) { + # Cache the site hash to accelerate the speed of init_plugins on SN + populate_site_hash(); + } scan_plugins($writepipe); exit(0); }