[devel] [PATCH 1/1] amfd: reset snd_msg_id in LostFound state [#2952]
If a PL rejoins the main network partition before the node failover timer expires, it is told to reboot by AMFD. AMFND thinks it has become headless and resets rcv_msg_id to 0, and shows this when it receives the reboot msg from AMFD: Rebooting OpenSAF NodeId = 0 EE Name = No EE Mapped, Reason: Message ID mismatch, rec xx, expected 1, OwnNodeId = xx, SupervisionTime = 60 We can avoid this by resetting snd_msg_id for this PL in AMFD in state LostFound, before the reboot msg is sent. --- src/amf/amfd/node_state.cc | 5 + 1 file changed, 5 insertions(+) diff --git a/src/amf/amfd/node_state.cc b/src/amf/amfd/node_state.cc index a8659dcf7..787ddab94 100644 --- a/src/amf/amfd/node_state.cc +++ b/src/amf/amfd/node_state.cc @@ -126,6 +126,11 @@ void LostFound::TimerExpired() { node->node_name.c_str()); if (fsm_->Active() == true) { +// amfnd thinks it's been headless and resets its rcv_msg_id to 0, +// also do the same here to avoid 'Message ID mismatch' errors +// at amfnd +node->snd_msg_id = 0; + LOG_WA("Sending node reboot order"); avd_d2n_reboot_snd(node); -- 2.17.1 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 0/1] Review Request for amfd: reset snd_msg_id in LostFound state [#2952]
Summary: amfd: reset snd_msg_id in LostFound state [#2952] Review request for Ticket(s): 2952 Peer Reviewer(s): Hans, Minh, Nagu Pull request to: *** LIST THE PERSON WITH PUSH ACCESS HERE *** Affected branch(es): develop Development branch: ticket-2952 Base revision: 39928c976dfce75f69892f717df3ea128ef835aa Personal repository: git://git.code.sf.net/u/userid-2226215/review Impacted area Impact y/n Docsn Build systemn RPM/packaging n Configuration files n Startup scripts n SAF servicesy OpenSAF servicesn Core libraries n Samples n Tests n Other n Comments (indicate scope for each "y" above): - revision 2ddb0f3a9bc401afcecf7e17f5a629a709e27c48 Author: Gary Lee Date: Fri, 2 Nov 2018 04:57:55 + amfd: reset snd_msg_id in LostFound state [#2952] If a PL rejoins the main network partition before the node failover timer expires, it is told to reboot by AMFD. AMFND thinks it has become headless and resets rcv_msg_id to 0, and shows this when it receives the reboot msg from AMFD: Rebooting OpenSAF NodeId = 0 EE Name = No EE Mapped, Reason: Message ID mismatch, rec xx, expected 1, OwnNodeId = xx, SupervisionTime = 60 We can avoid this by resetting snd_msg_id for this PL in AMFD in state LostFound, before the reboot msg is sent. Complete diffstat: -- src/amf/amfd/node_state.cc | 5 + 1 file changed, 5 insertions(+) Testing Commands: - *** LIST THE COMMAND LINE TOOLS/STEPS TO TEST YOUR CHANGES *** Testing, Expected Results: -- *** PASTE COMMAND OUTPUTS / TEST RESULTS *** Conditions of Submission: - *** HOW MANY DAYS BEFORE PUSHING, CONSENSUS ETC *** Arch Built StartedLinux distro --- mipsn n mips64 n n x86 n n x86_64 y y powerpc n n powerpc64 n n Reviewer Checklist: --- [Submitters: make sure that your review doesn't trigger any checkmarks!] Your checkin has not passed review because (see checked entries): ___ Your RR template is generally incomplete; it has too many blank entries that need proper data filled in. ___ You have failed to nominate the proper persons for review and push. ___ Your patches do not have proper short+long header ___ You have grammar/spelling in your header that is unacceptable. ___ You have exceeded a sensible line length in your headers/comments/text. ___ You have failed to put in a proper Trac Ticket # into your commits. ___ You have incorrectly put/left internal data in your comments/files (i.e. internal bug tracking tool IDs, product names etc) ___ You have not given any evidence of testing beyond basic build tests. Demonstrate some level of runtime or other sanity testing. ___ You have ^M present in some of your files. These have to be removed. ___ You have needlessly changed whitespace or added whitespace crimes like trailing spaces, or spaces before tabs. ___ You have mixed real technical changes with whitespace and other cosmetic code cleanup changes. These have to be separate commits. ___ You need to refactor your submission into logical chunks; there is too much content into a single commit. ___ You have extraneous garbage in your review (merge commits etc) ___ You have giant attachments which should never have been sent; Instead you should place your content in a public tree to be pulled. ___ You have too many commits attached to an e-mail; resend as threaded commits, or place in a public tree for a pull. ___ You have resent this content multiple times without a clear indication of what has changed between each re-send. ___ You have failed to adequately and individually address all of the comments and change requests that were proposed in the initial review. ___ You have a misconfigured ~/.gitconfig file (i.e. user.name, user.email etc) ___ Your computer have a badly configured date and time; confusing the the threaded patch review. ___ Your changes affect IPC mechanism, and you don't present any results for in-service upgradability test. ___ Your changes affect user manual and documentation, your patch series do not contain the patch that updates the Doxygen manual. ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 1/3] imm: add new test cases of API saImmOmSelectionObjectGet() of apitest [#2951]
--- src/imm/apitest/management/test_saImmOmInitialize.c | 8 .../apitest/management/test_saImmOmSelectionObjectGet.c | 15 +++ 2 files changed, 23 insertions(+) diff --git a/src/imm/apitest/management/test_saImmOmInitialize.c b/src/imm/apitest/management/test_saImmOmInitialize.c index 9dcfe7a..2dca5da 100644 --- a/src/imm/apitest/management/test_saImmOmInitialize.c +++ b/src/imm/apitest/management/test_saImmOmInitialize.c @@ -303,6 +303,8 @@ void saImmOmInitialize_11(void) extern void saImmOmSelectionObjectGet_01(void); extern void saImmOmSelectionObjectGet_02(void); +extern void saImmOmSelectionObjectGet_03(void); +extern void saImmOmSelectionObjectGet_04(void); extern void saImmOmDispatch_01(void); extern void saImmOmDispatch_02(void); extern void saImmOmDispatch_03(void); @@ -350,6 +352,12 @@ __attribute__((constructor)) static void saImmOmInitialize_constructor(void) test_case_add( 1, saImmOmSelectionObjectGet_02, "saImmOmSelectionObjectGet - SA_AIS_ERR_BAD_HANDLE - invalid handle"); + test_case_add( + 1, saImmOmSelectionObjectGet_03, + "saImmOmSelectionObjectGet - SA_AIS_ERR_BAD_HANDLE - uninitlized handle"); + test_case_add( + 1, saImmOmSelectionObjectGet_04, + "saImmOmSelectionObjectGet - SA_AIS_ERR_BAD_HANDLE - finalized handle"); test_case_add(1, saImmOmDispatch_01, "saImmOmDispatch - SA_AIS_OK SA_DISPATCH_ALL"); diff --git a/src/imm/apitest/management/test_saImmOmSelectionObjectGet.c b/src/imm/apitest/management/test_saImmOmSelectionObjectGet.c index 017fd70..75b8b86 100644 --- a/src/imm/apitest/management/test_saImmOmSelectionObjectGet.c +++ b/src/imm/apitest/management/test_saImmOmSelectionObjectGet.c @@ -35,3 +35,18 @@ void saImmOmSelectionObjectGet_02(void) test_validate(rc, SA_AIS_ERR_BAD_HANDLE); safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); } + +void saImmOmSelectionObjectGet_03(void) +{ + rc = immutil_saImmOmSelectionObjectGet(immOmHandle, ); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmSelectionObjectGet_04(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + immutil_saImmOmFinalize(immOmHandle); + rc = immutil_saImmOmSelectionObjectGet(immOmHandle, ); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 0/3] Review Request for imm: add new test cases of apitest [#2951]
Summary: imm: add new test cases of API saImmOmSelectionObjectGet() of apitest [#2951] Review request for Ticket(s): 2951 Peer Reviewer(s): vu.m.nguyen, Hans Nordeb??ck Pull request to: *** LIST THE PERSON WITH PUSH ACCESS HERE *** Affected branch(es): develop Development branch: ticket-2951 Base revision: 39928c976dfce75f69892f717df3ea128ef835aa Personal repository: git://git.code.sf.net/u/mohan-hasoln/review Impacted area Impact y/n Docsn Build systemn RPM/packaging n Configuration files n Startup scripts n SAF servicesn OpenSAF servicesn Core libraries n Samples n Tests y Other n NOTE: Patch(es) contain lines longer than 80 characers Comments (indicate scope for each "y" above): - *** EXPLAIN/COMMENT THE PATCH SERIES HERE *** revision c911b14077deab58eda68f7f5786bd030b2687fb Author: Mohan Kanakam Date: Thu, 1 Nov 2018 13:41:50 +0530 imm: add new test case of API saImmOmFinalize() of apitest [#2951] revision edae9e76d7f286fa400de1cd4c51a0ccc225de8c Author: Mohan Kanakam Date: Thu, 1 Nov 2018 13:32:04 +0530 imm: add new test case of API saImmOmDispatch() of apitest [#2951] revision 1fceef2f35a08c2490c11c9329725b58a6377e79 Author: Mohan Kanakam Date: Thu, 1 Nov 2018 13:15:40 +0530 imm: add new test cases of API saImmOmSelectionObjectGet() of apitest [#2951] Complete diffstat: -- src/imm/apitest/management/test_saImmOmDispatch.c | 72 ++ src/imm/apitest/management/test_saImmOmFinalize.c | 15 + .../apitest/management/test_saImmOmInitialize.c| 51 +++ .../management/test_saImmOmSelectionObjectGet.c| 15 + 4 files changed, 153 insertions(+) Testing Commands: - ./immomtest 1 Testing, Expected Results: -- 14 PASSED saImmOmSelectionObjectGet - SA_AIS_ERR_BAD_HANDLE - uninitlized handle 15 PASSED saImmOmSelectionObjectGet - SA_AIS_ERR_BAD_HANDLE - finalized handle 20 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - uninitilized handle SA_DISPATCH_ONE 21 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - finalized handle SA_DISPATCH_ONE 22 PASSED saImmOmDispatch - SA_AIS_OK SA_DISPATCH_BLOCKING 23 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - invalid handle SA_DISPATCH_ALL 24 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - uninitilized handle SA_DISPATCH_ALL 25 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - finalized handle SA_DISPATCH_ALL 26 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - invalid handle SA_DISPATCH_BLOCKING 27 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - uninitilized handle SA_DISPATCH_BLOCKING 28 PASSED saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - finalized handle SA_DISPATCH_BLOCKING 31 PASSED saImmOmFinalize - SA_AIS_ERR_BAD_HANDLE - finalized handle 32 PASSED saImmOmFinalize - SA_AIS_ERR_BAD_HANDLE - uninitlized handle Conditions of Submission: - Ack from maintainers Arch Built StartedLinux distro --- mipsn n mips64 n n x86 n n x86_64 y y powerpc n n powerpc64 n n Reviewer Checklist: --- [Submitters: make sure that your review doesn't trigger any checkmarks!] Your checkin has not passed review because (see checked entries): ___ Your RR template is generally incomplete; it has too many blank entries that need proper data filled in. ___ You have failed to nominate the proper persons for review and push. ___ Your patches do not have proper short+long header ___ You have grammar/spelling in your header that is unacceptable. ___ You have exceeded a sensible line length in your headers/comments/text. ___ You have failed to put in a proper Trac Ticket # into your commits. ___ You have incorrectly put/left internal data in your comments/files (i.e. internal bug tracking tool IDs, product names etc) ___ You have not given any evidence of testing beyond basic build tests. Demonstrate some level of runtime or other sanity testing. ___ You have ^M present in some of your files. These have to be removed. ___ You have needlessly changed whitespace or added whitespace crimes like trailing spaces, or spaces before tabs. ___ You have mixed real technical changes with whitespace and other cosmetic code cleanup changes. These have to be separate commits. ___ You need to refactor your submission into logical chunks; there is too much content into a single commit. ___ You have extraneous garbage in your review (merge commits etc) ___ You have giant attachments which should never have been sent; Instead you should place your content in a public
[devel] [PATCH 3/3] imm: add new test case of API saImmOmFinalize() of apitest [#2951]
--- src/imm/apitest/management/test_saImmOmFinalize.c | 15 +++ src/imm/apitest/management/test_saImmOmInitialize.c | 8 2 files changed, 23 insertions(+) diff --git a/src/imm/apitest/management/test_saImmOmFinalize.c b/src/imm/apitest/management/test_saImmOmFinalize.c index 1c60657..02238a8 100644 --- a/src/imm/apitest/management/test_saImmOmFinalize.c +++ b/src/imm/apitest/management/test_saImmOmFinalize.c @@ -33,3 +33,18 @@ void saImmOmFinalize_02(void) test_validate(rc, SA_AIS_ERR_BAD_HANDLE); safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); } + +void saImmOmFinalize_03(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + rc = immutil_saImmOmFinalize(immOmHandle); + rc = immutil_saImmOmFinalize(immOmHandle); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmFinalize_04(void) +{ + rc = immutil_saImmOmFinalize(immOmHandle); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} diff --git a/src/imm/apitest/management/test_saImmOmInitialize.c b/src/imm/apitest/management/test_saImmOmInitialize.c index b17ab86..84b6cf2 100644 --- a/src/imm/apitest/management/test_saImmOmInitialize.c +++ b/src/imm/apitest/management/test_saImmOmInitialize.c @@ -320,6 +320,8 @@ extern void saImmOmDispatch_12(void); extern void saImmOmDispatch_13(void); extern void saImmOmFinalize_01(void); extern void saImmOmFinalize_02(void); +extern void saImmOmFinalize_03(void); +extern void saImmOmFinalize_04(void); extern void saImmOmThreadInterference_01(void); __attribute__((constructor)) static void saImmOmInitialize_constructor(void) @@ -409,6 +411,12 @@ __attribute__((constructor)) static void saImmOmInitialize_constructor(void) test_case_add( 1, saImmOmFinalize_02, "saImmOmFinalize - SA_AIS_ERR_BAD_HANDLE - invalid handle"); + test_case_add( + 1, saImmOmFinalize_03, + "saImmOmFinalize - SA_AIS_ERR_BAD_HANDLE - finalized handle"); + test_case_add( + 1, saImmOmFinalize_04, + "saImmOmFinalize - SA_AIS_ERR_BAD_HANDLE - uninitlized handle"); test_case_add( 1, saImmOmThreadInterference_01, -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 2/3] imm: add new test case of API saImmOmDispatch() of apitest [#2951]
--- src/imm/apitest/management/test_saImmOmDispatch.c | 72 ++ .../apitest/management/test_saImmOmInitialize.c| 35 +++ 2 files changed, 107 insertions(+) diff --git a/src/imm/apitest/management/test_saImmOmDispatch.c b/src/imm/apitest/management/test_saImmOmDispatch.c index 3648a95..0ab9885 100644 --- a/src/imm/apitest/management/test_saImmOmDispatch.c +++ b/src/imm/apitest/management/test_saImmOmDispatch.c @@ -52,3 +52,75 @@ void saImmOmDispatch_04(void) test_validate(rc, SA_AIS_ERR_INVALID_PARAM); safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); } + +void saImmOmDispatch_05(void) +{ + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_ONE); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmDispatch_06(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + immutil_saImmOmFinalize(immOmHandle); + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_ONE); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmDispatch_07(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_BLOCKING); + test_validate(rc, SA_AIS_OK); + safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); +} + +void saImmOmDispatch_08(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + rc = saImmOmDispatch(-1, SA_DISPATCH_ALL); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); + safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); +} + +void saImmOmDispatch_09(void) +{ + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_ALL); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmDispatch_10(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + immutil_saImmOmFinalize(immOmHandle); + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_ALL); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmDispatch_11(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + rc = saImmOmDispatch(-1, SA_DISPATCH_BLOCKING); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); + safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); +} + +void saImmOmDispatch_12(void) +{ + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_BLOCKING); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmDispatch_13(void) +{ + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + immutil_saImmOmFinalize(immOmHandle); + rc = saImmOmDispatch(immOmHandle, SA_DISPATCH_BLOCKING); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} diff --git a/src/imm/apitest/management/test_saImmOmInitialize.c b/src/imm/apitest/management/test_saImmOmInitialize.c index 2dca5da..b17ab86 100644 --- a/src/imm/apitest/management/test_saImmOmInitialize.c +++ b/src/imm/apitest/management/test_saImmOmInitialize.c @@ -309,6 +309,15 @@ extern void saImmOmDispatch_01(void); extern void saImmOmDispatch_02(void); extern void saImmOmDispatch_03(void); extern void saImmOmDispatch_04(void); +extern void saImmOmDispatch_05(void); +extern void saImmOmDispatch_06(void); +extern void saImmOmDispatch_07(void); +extern void saImmOmDispatch_08(void); +extern void saImmOmDispatch_09(void); +extern void saImmOmDispatch_10(void); +extern void saImmOmDispatch_11(void); +extern void saImmOmDispatch_12(void); +extern void saImmOmDispatch_13(void); extern void saImmOmFinalize_01(void); extern void saImmOmFinalize_02(void); extern void saImmOmThreadInterference_01(void); @@ -369,6 +378,32 @@ __attribute__((constructor)) static void saImmOmInitialize_constructor(void) test_case_add( 1, saImmOmDispatch_04, "saImmOmDispatch - SA_AIS_ERR_INVALID_PARAM - invalid dispatchFlags"); + test_case_add( + 1, saImmOmDispatch_05, + "saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - uninitilized handle SA_DISPATCH_ONE"); + test_case_add( + 1, saImmOmDispatch_06, + "saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - finalized handle SA_DISPATCH_ONE"); + test_case_add(1, saImmOmDispatch_07, + "saImmOmDispatch - SA_AIS_OK SA_DISPATCH_BLOCKING"); + test_case_add( + 1, saImmOmDispatch_08, + "saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - invalid handle SA_DISPATCH_ALL"); + test_case_add( + 1, saImmOmDispatch_09, + "saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - uninitilized handle SA_DISPATCH_ALL"); + test_case_add( + 1, saImmOmDispatch_10, + "saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - finalized handle SA_DISPATCH_ALL"); + test_case_add( + 1, saImmOmDispatch_11, + "saImmOmDispatch - SA_AIS_ERR_BAD_HANDLE - invalid handle SA_DISPATCH_BLOCKING"); + test_case_add( +
Re: [devel] [PATCH 1/1] imm: fix osafimmnd coredump genereted during sanity test [#2947]
Ack, review only/Thanks HansN -Original Message- From: Vu Minh Nguyen Sent: den 29 oktober 2018 10:15 To: Hans Nordebäck ; Lennart Lund ; Gary Lee Cc: opensaf-devel@lists.sourceforge.net; Vu Minh Nguyen Subject: [PATCH 1/1] imm: fix osafimmnd coredump genereted during sanity test [#2947] The coredump is generated in the context of processing the message type "IMMND_EVT_D2ND_IMPLDELETE" because the memory is corrupted at the time of decoding that message. It allocated 'size' bytes of memory with the boundary in range [0 - 'size - 1'], but modified - added null terminated, the memory at the index of `size` which was out of that range. This patch fixes such issue. The memory should be allocated with `size + 1` bytes in length. --- src/imm/common/immsv_evt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/imm/common/immsv_evt.c b/src/imm/common/immsv_evt.c index 03a7f8125..c93f82a0f 100644 --- a/src/imm/common/immsv_evt.c +++ b/src/imm/common/immsv_evt.c @@ -2898,7 +2898,7 @@ static uint32_t immsv_evt_dec_sublevels(NCS_UBAID *i_ub, IMMSV_EVT *o_evt) implNameList[i].size = ncs_decode_32bit(); ncs_dec_skip_space(i_ub, 4); - implNameList[i].buf = (char *)malloc(implNameList[i].size); + implNameList[i].buf = (char *)malloc(implNameList[i].size + 1); if (implNameList[i].buf == NULL || ncs_decode_n_octets_from_uba(i_ub, (uint8_t *)implNameList[i].buf, -- 2.18.0 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 1/1] amf: active amfd should check nodes after reinit with imm [#2949]
- When AMFD got IMM BAD_HANDLE, it will try to finalize current OI and reinit new OI, it make some callbacks are removed without execution. Try to dispatch OI before finalize it to reinit. - After reinit OI, check node db to find out node which is not exist in IMM (in case ccb apply delete node miss execution) then cleanup SU/COMP relate to the node and delete the node. --- src/amf/amfd/imm.cc | 4 +++ src/amf/amfd/node.cc | 89 +++- src/amf/amfd/node.h | 1 + src/amf/amfd/su.cc | 79 +- 4 files changed, 81 insertions(+), 92 deletions(-) diff --git a/src/amf/amfd/imm.cc b/src/amf/amfd/imm.cc index 82d2b13..1b14383 100644 --- a/src/amf/amfd/imm.cc +++ b/src/amf/amfd/imm.cc @@ -41,6 +41,7 @@ #include "amf/common/amf_defs.h" #include "amf/amfd/imm.h" #include "amf/amfd/cluster.h" +#include "amf/amfd/node.h" #include "amf/amfd/app.h" #include "amf/amfd/sgtype.h" #include "amf/amfd/sg.h" @@ -2132,6 +2133,8 @@ static void *avd_imm_reinit_bg_thread(void *_cb) { immutilWrapperProfile.errorsAreFatal = 0; + /* Try to dispatch imm cb if any, e.g: apply cb, before finalize OI */ + (void)saImmOiDispatch(avd_cb->immOiHandle, SA_DISPATCH_ALL); while (++no_of_retries < MAX_NO_RETRIES) { (void)saImmOiFinalize(avd_cb->immOiHandle); @@ -2167,6 +2170,7 @@ static void *avd_imm_reinit_bg_thread(void *_cb) { osaf_mutex_unlock_ordie(_reinit_mutex); exit(EXIT_FAILURE); } + avd_check_nodes_after_renit_imm(); } else { /* become applier and re-read the config */ rc = avd_imm_applier_set(); diff --git a/src/amf/amfd/node.cc b/src/amf/amfd/node.cc index 201f1fc..eef0a8b 100644 --- a/src/amf/amfd/node.cc +++ b/src/amf/amfd/node.cc @@ -153,57 +153,23 @@ AVD_AVND *avd_node_new(const std::string ) { void avd_node_delete(AVD_AVND *node) { TRACE_ENTER(); osafassert(node->pg_csi_list.n_nodes == 0); - if (node->node_info.nodeId) avd_node_delete_nodeid(node); - /* Check if the SUs and related objects are still left. This can - happen on Standby Amfd when it has just read the configuration - and before it becomes applier, Act Amfd deletes SUs. Those SUs - will be left out at Standby Amfd. Though this could be rare.*/ - if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) { -if (node->list_of_su.empty() != true) { - std::set su_list; - std::set comp_list; - for (const auto : node->list_of_su) su_list.insert(su->name); - for (std::set::const_iterator iter = su_list.begin(); - iter != su_list.end(); ++iter) { -AVD_SU *su = su_db->find(*iter); -TRACE("Standby Amfd, su '%s' not deleted", su->name.c_str()); -for (const auto : su->list_of_comp) - comp_list.insert(Amf::to_string(>comp_info.name)); -for (std::set::const_iterator iter1 = comp_list.begin(); - iter1 != comp_list.end(); ++iter1) { - AVD_COMP *comp = comp_db->find(*iter1); - TRACE("Standby Amfd, comp '%s' not deleted", -osaf_extended_name_borrow(>comp_info.name)); - - std::map::iterator it = - compcstype_db->begin(); - while (it != compcstype_db->end()) { -AVD_COMPCS_TYPE *compcstype = it->second; -if (compcstype->comp == comp) { - TRACE("Standby Amfd, compcstype '%s' not deleted", -compcstype->name.c_str()); - it = compcstype_db->erase(it); - delete compcstype; -} else - ++it; - } + if (node->node_info.nodeId) { +avd_node_delete_nodeid(node); + } - /* Delete the Comp. */ - struct CcbUtilOperationData opdata; - osaf_extended_name_alloc( - osaf_extended_name_borrow(>comp_info.name), - ); - comp_ccb_apply_delete_hdlr(); -} -comp_list.clear(); -/* Delete the SU. */ -struct CcbUtilOperationData opdata; -opdata.userData = su; -su_ccb_apply_delete_hdlr(); - } - su_list.clear(); -} + std::set su_list; + for (const auto : node->list_of_ncs_su) su_list.insert(su->name); + for (const auto : node->list_of_su) su_list.insert(su->name); + for (std::set::const_iterator iter = su_list.begin(); + iter != su_list.end(); ++iter) { +AVD_SU *su = su_db->find(*iter); +LOG_WA("su '%s' not deleted, delete it", su->name.c_str()); +struct CcbUtilOperationData opdata; +opdata.userData = su; +su_ccb_apply_delete_hdlr(); } + su_list.clear(); + m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, node, AVSV_CKPT_AVD_NODE_CONFIG); node_name_db->erase(node->name); delete node; @@ -1678,3 +1644,28 @@ bool AVD_AVND::is_campaign_set_for_all_sus() const { return false; } } + +void avd_check_nodes_after_renit_imm() { + TRACE_ENTER(); + SaImmAccessorHandleT accessorHandle; +