[pve-devel] applied: [PATCH cluster] use constants for IPC request types
Wolfgang Bumiller
w.bumiller at proxmox.com
Wed May 23 11:55:41 CEST 2018
applied, with a fixup to the Makefile.am to have IPCConst.pm depend on
cfs-ipc-ops.h in addition to its generator awk script.
On Fri, May 18, 2018 at 12:37:25PM +0200, Thomas Lamprecht wrote:
> Add a simple header with the constants as defines.
> Use a simple awk script to translate this to an perl module with the
> constants exported. awk is far easier to understand and maintain than
> h2ph or h2xs, also their result is quite a mess for such a trivial
> thing, IMO.
>
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
> ---
> data/PVE/Cluster.pm | 19 +++++++++---------
> data/PVE/Cluster/IPCConst.pm.awk | 21 ++++++++++++++++++++
> data/PVE/Makefile.am | 8 ++++++++
> data/src/cfs-ipc-ops.h | 42 ++++++++++++++++++++++++++++++++++++++++
> data/src/server.c | 19 +++++++++---------
> 5 files changed, 91 insertions(+), 18 deletions(-)
> create mode 100644 data/PVE/Cluster/IPCConst.pm.awk
> create mode 100644 data/src/cfs-ipc-ops.h
>
> diff --git a/data/PVE/Cluster.pm b/data/PVE/Cluster.pm
> index 4e3bf7a..7569abc 100644
> --- a/data/PVE/Cluster.pm
> +++ b/data/PVE/Cluster.pm
> @@ -17,6 +17,7 @@ use PVE::IPCC;
> use PVE::SafeSyslog;
> use PVE::JSONSchema;
> use PVE::Network;
> +use PVE::Cluster::IPCConst;
> use JSON;
> use RRDs;
> use Encode;
> @@ -408,7 +409,7 @@ my $ipcc_get_config = sub {
> my ($path) = @_;
>
> my $bindata = pack "Z*", $path;
> - my $res = PVE::IPCC::ipcc_send_rec(6, $bindata);
> + my $res = PVE::IPCC::ipcc_send_rec(CFS_IPC_GET_CONFIG, $bindata);
> if (!defined($res)) {
> if ($! != 0) {
> return undef if $! == ENOENT;
> @@ -424,7 +425,7 @@ my $ipcc_get_status = sub {
> my ($name, $nodename) = @_;
>
> my $bindata = pack "Z[256]Z[256]", $name, ($nodename || "");
> - return PVE::IPCC::ipcc_send_rec(5, $bindata);
> + return PVE::IPCC::ipcc_send_rec(CFS_IPC_GET_STATUS, $bindata);
> };
>
> my $ipcc_update_status = sub {
> @@ -434,7 +435,7 @@ my $ipcc_update_status = sub {
> # update status
> my $bindata = pack "Z[256]Z*", $name, $raw;
>
> - return &$ipcc_send_rec(4, $bindata);
> + return &$ipcc_send_rec(CFS_IPC_SET_STATUS, $bindata);
> };
>
> my $ipcc_log = sub {
> @@ -443,7 +444,7 @@ my $ipcc_log = sub {
> my $bindata = pack "CCCZ*Z*Z*", $priority, bytes::length($ident) + 1,
> bytes::length($tag) + 1, $ident, $tag, $msg;
>
> - return &$ipcc_send_rec(7, $bindata);
> + return &$ipcc_send_rec(CFS_IPC_LOG_CLUSTER_MSG, $bindata);
> };
>
> my $ipcc_get_cluster_log = sub {
> @@ -452,7 +453,7 @@ my $ipcc_get_cluster_log = sub {
> $max = 0 if !defined($max);
>
> my $bindata = pack "VVVVZ*", $max, 0, 0, 0, ($user || "");
> - return &$ipcc_send_rec(8, $bindata);
> + return &$ipcc_send_rec(CFS_IPC_GET_CLUSTER_LOG, $bindata);
> };
>
> my $ccache = {};
> @@ -460,7 +461,7 @@ my $ccache = {};
> sub cfs_update {
> my ($fail) = @_;
> eval {
> - my $res = &$ipcc_send_rec_json(1);
> + my $res = &$ipcc_send_rec_json(CFS_IPC_GET_FS_VERSION);
> #warn "GOT1: " . Dumper($res);
> die "no starttime\n" if !$res->{starttime};
>
> @@ -487,7 +488,7 @@ sub cfs_update {
> eval {
> if (!$clinfo->{version} || $clinfo->{version} != $versions->{clinfo}) {
> #warn "detected new clinfo\n";
> - $clinfo = &$ipcc_send_rec_json(2);
> + $clinfo = &$ipcc_send_rec_json(CFS_IPC_GET_CLUSTER_INFO);
> }
> };
> $err = $@;
> @@ -500,7 +501,7 @@ sub cfs_update {
> eval {
> if (!$vmlist->{version} || $vmlist->{version} != $versions->{vmlist}) {
> #warn "detected new vmlist1\n";
> - $vmlist = &$ipcc_send_rec_json(3);
> + $vmlist = &$ipcc_send_rec_json(CFS_IPC_GET_GUEST_LIST);
> }
> };
> $err = $@;
> @@ -617,7 +618,7 @@ sub rrd_dump {
>
> my $raw;
> eval {
> - $raw = &$ipcc_send_rec(10);
> + $raw = &$ipcc_send_rec(CFS_IPC_GET_RRD_DUMP);
> };
> my $err = $@;
>
> diff --git a/data/PVE/Cluster/IPCConst.pm.awk b/data/PVE/Cluster/IPCConst.pm.awk
> new file mode 100644
> index 0000000..3c622ec
> --- /dev/null
> +++ b/data/PVE/Cluster/IPCConst.pm.awk
> @@ -0,0 +1,21 @@
> +BEGIN {
> + print "package PVE::Cluster::IPCConst;"
> + print "use strict; use warnings;"
> + print
> + print "use base 'Exporter';"
> + print
> + print "my %IPC_OPS;"
> + print "BEGIN {"
> + print " %IPC_OPS = ("
> +}
> +
> +/^#define CFS_IPC/ {
> + print " " $2, "=>", $3 ","
> +}
> +
> +END {
> + print " );"
> + print "}"
> + print "use constant \\%IPC_OPS;"
> + print "our @EXPORT = keys(%IPC_OPS);"
> +}
> diff --git a/data/PVE/Makefile.am b/data/PVE/Makefile.am
> index 1f576b0..393f0c8 100644
> --- a/data/PVE/Makefile.am
> +++ b/data/PVE/Makefile.am
> @@ -4,6 +4,10 @@ IPCC.c: IPCC.xs
> xsubpp IPCC.xs > IPCC.xsc
> mv IPCC.xsc IPCC.c
>
> +Cluster/IPCConst.pm: Cluster/IPCConst.pm.awk
> + awk -f $^ ../src/cfs-ipc-ops.h > $@.tmp
> + mv $@.tmp $@
> +
> AM_CFLAGS = -shared -fPIC -Wl,-z,relro -Wall -Werror -Wno-strict-aliasing $(PERL_INC) -DXS_VERSION=VERSION
> LDADD = $(QB_LIBS)
>
> @@ -21,6 +25,7 @@ export PERLLIB=..
> mv $@.tmp $@
>
> man1_MANS = pvecm.1
> +pvecm.1-synopsis.adoc: Cluster/IPCConst.pm
> man5_MANS = datacenter.cfg.5
>
> IPCC_so_SOURCES = IPCC.c ppport.h
> @@ -28,6 +33,9 @@ IPCC_so_SOURCES = IPCC.c ppport.h
> pvelib_DATA = IPCC.pm Cluster.pm Corosync.pm
> pvelibdir = $(PERL_VENDORLIB)/PVE
>
> +pveclusterlib_DATA = Cluster/IPCConst.pm
> +pveclusterlibdir = $(PERL_VENDORLIB)/PVE/Cluster
> +
> noinst_DATA = pvecm.bash-completion
>
> cliclass_DATA = CLI/pvecm.pm
> diff --git a/data/src/cfs-ipc-ops.h b/data/src/cfs-ipc-ops.h
> new file mode 100644
> index 0000000..a1bf51d
> --- /dev/null
> +++ b/data/src/cfs-ipc-ops.h
> @@ -0,0 +1,42 @@
> +/*
> + Copyright (C) 2018 Proxmox Server Solutions GmbH
> +
> + This program is free software: you can redistribute it and/or modify
> + it under the terms of the GNU Affero General Public License as published by
> + the Free Software Foundation, either version 3 of the License, or
> + (at your option) any later version.
> +
> + This program is distributed in the hope that it will be useful,
> + but WITHOUT ANY WARRANTY; without even the implied warranty of
> + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + GNU Affero General Public License for more details.
> +
> + You should have received a copy of the GNU Affero General Public License
> + along with this program. If not, see <http://www.gnu.org/licenses/>.
> +
> + Author: Thomas Lamprecht <t.lamprecht at proxmox.com>
> +
> +*/
> +
> +#ifndef _PVE_CFS_IPC_OPS_H_
> +#define _PVE_CFS_IPC_OPS_H_
> +
> +#define CFS_IPC_GET_FS_VERSION 1
> +
> +#define CFS_IPC_GET_CLUSTER_INFO 2
> +
> +#define CFS_IPC_GET_GUEST_LIST 3
> +
> +#define CFS_IPC_SET_STATUS 4
> +
> +#define CFS_IPC_GET_STATUS 5
> +
> +#define CFS_IPC_GET_CONFIG 6
> +
> +#define CFS_IPC_LOG_CLUSTER_MSG 7
> +
> +#define CFS_IPC_GET_CLUSTER_LOG 8
> +
> +#define CFS_IPC_GET_RRD_DUMP 10
> +
> +#endif
> diff --git a/data/src/server.c b/data/src/server.c
> index 0d366b1..54289c7 100644
> --- a/data/src/server.c
> +++ b/data/src/server.c
> @@ -38,6 +38,7 @@
> #include <glib.h>
>
> #include "cfs-utils.h"
> +#include "cfs-ipc-ops.h"
> #include "status.h"
> #include "memdb.h"
> #include "logger.h"
> @@ -171,7 +172,7 @@ static int32_t s1_msg_process_fn(
> g_string_truncate(outbuf, 0);
>
> int32_t result = -ECHRNG;
> - if (req_pt->id == 1) {
> + if (req_pt->id == CFS_IPC_GET_FS_VERSION) {
>
> if (req_pt->size != sizeof(struct qb_ipc_request_header)) {
> result = -EINVAL;
> @@ -179,7 +180,7 @@ static int32_t s1_msg_process_fn(
> result = cfs_create_version_msg(outbuf);
> }
>
> - } else if (req_pt->id == 2) {
> + } else if (req_pt->id == CFS_IPC_GET_CLUSTER_INFO) {
>
> if (req_pt->size != sizeof(struct qb_ipc_request_header)) {
> result = -EINVAL;
> @@ -187,14 +188,14 @@ static int32_t s1_msg_process_fn(
> result = cfs_create_memberlist_msg(outbuf);
> }
>
> - } else if (req_pt->id == 3) {
> + } else if (req_pt->id == CFS_IPC_GET_GUEST_LIST) {
>
> if (req_pt->size != sizeof(struct qb_ipc_request_header)) {
> result = -EINVAL;
> } else {
> result = cfs_create_vmlist_msg(outbuf);
> }
> - } else if (req_pt->id == 4) {
> + } else if (req_pt->id == CFS_IPC_SET_STATUS) {
>
> cfs_status_update_request_header_t *rh =
> (cfs_status_update_request_header_t *)data;
> @@ -213,7 +214,7 @@ static int32_t s1_msg_process_fn(
>
> result = cfs_status_set(rh->name, dataptr, datasize);
> }
> - } else if (req_pt->id == 5) {
> + } else if (req_pt->id == CFS_IPC_GET_STATUS) {
>
> cfs_status_get_request_header_t *rh =
> (cfs_status_get_request_header_t *)data;
> @@ -229,7 +230,7 @@ static int32_t s1_msg_process_fn(
>
> result = cfs_create_status_msg(outbuf, rh->nodename, rh->name);
> }
> - } else if (req_pt->id == 6) {
> + } else if (req_pt->id == CFS_IPC_GET_CONFIG) {
>
> int pathlen = req_pt->size - sizeof(struct qb_ipc_request_header);
>
> @@ -251,7 +252,7 @@ static int32_t s1_msg_process_fn(
> }
> }
> }
> - } else if (req_pt->id == 7) {
> + } else if (req_pt->id == CFS_IPC_LOG_CLUSTER_MSG) {
>
> cfs_log_msg_request_header_t *rh =
> (cfs_log_msg_request_header_t *)data;
> @@ -286,7 +287,7 @@ static int32_t s1_msg_process_fn(
> result = -EINVAL;
> }
> }
> - } else if (req_pt->id == 8) {
> + } else if (req_pt->id == CFS_IPC_GET_CLUSTER_LOG) {
>
> cfs_log_get_request_header_t *rh =
> (cfs_log_get_request_header_t *)data;
> @@ -304,7 +305,7 @@ static int32_t s1_msg_process_fn(
> cfs_cluster_log_dump(outbuf, user, max);
> result = 0;
> }
> - } else if (req_pt->id == 10) {
> + } else if (req_pt->id == CFS_IPC_GET_RRD_DUMP) {
>
> if (req_pt->size != sizeof(struct qb_ipc_request_header)) {
> result = -EINVAL;
> --
> 2.14.2
More information about the pve-devel
mailing list