mirror of
https://git.proxmox.com/git/mirror_corosync
synced 2025-08-03 19:33:19 +00:00
A couple of errors was found when I did unit (component) testing of amf.c
using CUnit. With this patch, amf.c can handle a full totem send queue. This is not easily reproducable with function test. amf.c is also prepared for further component testing with this patch. git-svn-id: http://svn.fedorahosted.org/svn/corosync/trunk@1272 fd59a12c-fef9-0310-b244-a6a79926bd2f
This commit is contained in:
parent
f983d37a2f
commit
d6820692e4
61
exec/amf.c
61
exec/amf.c
@ -155,6 +155,10 @@
|
||||
#include "objdb.h"
|
||||
#include "print.h"
|
||||
|
||||
#ifdef AMFTEST
|
||||
#define static
|
||||
#endif
|
||||
|
||||
#ifndef HOST_NAME_MAX
|
||||
# define HOST_NAME_MAX 255
|
||||
#endif
|
||||
@ -471,50 +475,6 @@ static const char *scsm_state_names[] = {
|
||||
"UNCONFIGURED"
|
||||
};
|
||||
|
||||
enum scsm_states {
|
||||
IDLE = 1,
|
||||
PROBING_1,
|
||||
PROBING_2,
|
||||
CREATING_CLUSTER_MODEL,
|
||||
SYNCHRONIZING,
|
||||
NORMAL_OPERATION,
|
||||
UPDATING_CLUSTER_MODEL,
|
||||
UNCONFIGURED
|
||||
};
|
||||
|
||||
/**
|
||||
* State descriptor for the AMF Synchronisation Control State
|
||||
* Machine (SCSM).
|
||||
*/
|
||||
struct scsm_descriptor {
|
||||
enum scsm_states state;
|
||||
poll_timer_handle timer_handle;
|
||||
|
||||
/* node ID of current sync master */
|
||||
unsigned int sync_master;
|
||||
|
||||
unsigned int *joined_list;
|
||||
unsigned int joined_list_entries;
|
||||
struct amf_cluster *cluster;
|
||||
struct amf_node *node;
|
||||
struct amf_application *app;
|
||||
int app_sync_completed;
|
||||
struct amf_sg *sg;
|
||||
int sg_sync_completed;
|
||||
struct amf_su *su;
|
||||
int su_sync_completed;
|
||||
struct amf_comp *comp;
|
||||
int comp_sync_completed;
|
||||
struct amf_healthcheck *healthcheck;
|
||||
struct amf_si *si;
|
||||
int si_sync_completed;
|
||||
struct amf_si_assignment *si_assignment;
|
||||
struct amf_csi *csi;
|
||||
int csi_sync_completed;
|
||||
struct amf_csi_assignment *csi_assignment;
|
||||
struct amf_csi_attribute *csi_attribute;
|
||||
};
|
||||
|
||||
/**
|
||||
* Storage for AMF Synchronisation Control State Machine (SCSM).
|
||||
*/
|
||||
@ -658,7 +618,6 @@ static int mcast_sync_data (
|
||||
|
||||
if (res != 0) {
|
||||
dprintf("Unable to send %d bytes of sync data\n", req_exec.header.size);
|
||||
openais_exit_error (AIS_DONE_FATAL_ERR);
|
||||
}
|
||||
|
||||
return res;
|
||||
@ -953,7 +912,7 @@ static int csi_sync (struct amf_csi *csi)
|
||||
scsm.csi_sync_completed = 1;
|
||||
}
|
||||
|
||||
if (scsm.csi_assignment == NULL) {
|
||||
if (scsm.csi_assignment == NULL && scsm.csi_attribute == NULL) {
|
||||
scsm.csi_assignment = scsm.csi->assigned_csis;
|
||||
}
|
||||
for (; scsm.csi_assignment != NULL;
|
||||
@ -1010,7 +969,7 @@ static int si_sync (struct amf_si *si)
|
||||
scsm.si_sync_completed = 1;
|
||||
}
|
||||
|
||||
if (scsm.si_assignment == NULL) {
|
||||
if (scsm.si_assignment == NULL && scsm.csi == NULL) {
|
||||
scsm.si_assignment = scsm.si->assigned_sis;
|
||||
}
|
||||
for (; scsm.si_assignment != NULL; scsm.si_assignment = scsm.si_assignment->next) {
|
||||
@ -1049,7 +1008,7 @@ static int application_sync (struct amf_application *app)
|
||||
scsm.app_sync_completed = 1;
|
||||
}
|
||||
|
||||
if (scsm.sg == NULL) {
|
||||
if (scsm.sg == NULL && scsm.si == NULL) {
|
||||
scsm.sg = scsm.app->sg_head;
|
||||
}
|
||||
|
||||
@ -1228,7 +1187,7 @@ static int amf_sync_process (void)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
#ifdef AMFTEST
|
||||
{
|
||||
/*
|
||||
* Test code to generate the event "sync master died" in the
|
||||
@ -1295,7 +1254,7 @@ static void amf_sync_activate (void)
|
||||
sync_state_set (NORMAL_OPERATION);
|
||||
if (this_amf_node != NULL) {
|
||||
this_amf_node->nodeid = this_ip->nodeid;
|
||||
#ifdef AMF_DEBUG
|
||||
#ifdef AMFDEBUG
|
||||
amf_runtime_attributes_print (amf_cluster);
|
||||
#endif
|
||||
amf_cluster_sync_ready (amf_cluster, this_amf_node);
|
||||
@ -1334,7 +1293,7 @@ static int amf_exec_init_fn (struct objdb_iface_ver0 *objdb)
|
||||
openais_exit_error (AIS_DONE_FATAL_ERR);
|
||||
}
|
||||
|
||||
if (!amf_enabled (objdb)) {
|
||||
if (objdb != NULL && !amf_enabled (objdb)) {
|
||||
sync_state_set (UNCONFIGURED);
|
||||
return 0;
|
||||
}
|
||||
|
44
exec/amf.h
44
exec/amf.h
@ -52,6 +52,50 @@
|
||||
|
||||
#define AMF_PROTOCOL_VERSION 1
|
||||
|
||||
enum scsm_states {
|
||||
IDLE = 1,
|
||||
PROBING_1,
|
||||
PROBING_2,
|
||||
CREATING_CLUSTER_MODEL,
|
||||
SYNCHRONIZING,
|
||||
NORMAL_OPERATION,
|
||||
UPDATING_CLUSTER_MODEL,
|
||||
UNCONFIGURED
|
||||
};
|
||||
|
||||
/**
|
||||
* State descriptor for the AMF Synchronisation Control State
|
||||
* Machine (SCSM).
|
||||
*/
|
||||
struct scsm_descriptor {
|
||||
enum scsm_states state;
|
||||
poll_timer_handle timer_handle;
|
||||
|
||||
/* node ID of current sync master */
|
||||
unsigned int sync_master;
|
||||
|
||||
unsigned int *joined_list;
|
||||
unsigned int joined_list_entries;
|
||||
struct amf_cluster *cluster;
|
||||
struct amf_node *node;
|
||||
struct amf_application *app;
|
||||
int app_sync_completed;
|
||||
struct amf_sg *sg;
|
||||
int sg_sync_completed;
|
||||
struct amf_su *su;
|
||||
int su_sync_completed;
|
||||
struct amf_comp *comp;
|
||||
int comp_sync_completed;
|
||||
struct amf_healthcheck *healthcheck;
|
||||
struct amf_si *si;
|
||||
int si_sync_completed;
|
||||
struct amf_si_assignment *si_assignment;
|
||||
struct amf_csi *csi;
|
||||
int csi_sync_completed;
|
||||
struct amf_csi_assignment *csi_assignment;
|
||||
struct amf_csi_attribute *csi_attribute;
|
||||
};
|
||||
|
||||
enum clc_component_types {
|
||||
clc_component_sa_aware = 0, /* sa aware */
|
||||
clc_component_proxied_pre = 1, /* proxied, pre-instantiable */
|
||||
|
Loading…
Reference in New Issue
Block a user