- **summary**: imm: Implicit class/object-applier checked by OiImplementeSet is 
incorrect --> imm: Implicit class/object-applier checked by OiImplementeSet is 
not globally consistent
- **Comment**:

The actual local check done for the locall attaching applier is correct. The 
problem is that the same check may fail at other nodes (where the applier is 
not currently attaching) resulting in the
applier attach being handled as rejected at some other node. This will not 
impact the correct
behavior of the applier mechanism where it attached. That logic is purely node 
local.

A detrimental effect that can happen is that a future sync may detect an 
inconstency on
applier-id for a given applier name and escalate this to a restart of the node 
director(s) that detects this inconsistency. That is a serious side effect so 
the problem needs to be fixed.
One quick solution would be to disarm the check, or at least reduce its 
severity to a warning.
That would of course not remove the inconsistency.

Worst case scenario resulting from he inconsistency on applier 
existence/identity is that two appliers could be allowed to attach under the 
same applier name, at two or more different nodes.
That in itself would not be a problem for the applier mechanism. A problem 
would only ocur
if a third party tries to communicate with the supposed unique named applier 
using a direct
admin-operation with the applier-name as the target. Such an admin-operation 
would end up
arbitrarily reaching one of the appliers under that name.



---

** [tickets:#1504] imm: Implicit class/object-applier checked by 
OiImplementeSet is not globally consistent**

**Status:** assigned
**Milestone:** 4.5.2
**Created:** Mon Sep 28, 2015 04:15 AM UTC by Hung Nguyen
**Last Updated:** Mon Sep 28, 2015 10:58 AM UTC
**Owner:** Hung Nguyen


Set an applier to a class. Then exit immapplier to detach the applier.

~~~~
root@SC1:~# immapplier -a @whatever Test
~~~~

 
 
Let another node join the cluster.
Create a CCB which is active on an object of 'Test' class. Don't commit the CCB.

~~~~
root@SC1:~# immcfg
> immcfg -c Test test=1
>
~~~~


Try to set applier again.

~~~~
root@SC1:/srv/shared# immapplier -a @whatever Test
Implementer: @whatever
ImmVersion: A 2 16
error - saImmOiImplementerSet FAILED: SA_AIS_ERR_TRY_AGAIN (6)
~~~~

SC-1

~~~~
osafimmnd [419:immsv_evt.c:5414] T8 Received: IMMND_EVT_D2ND_IMPLSET_RSP (60) 
from 0
osafimmnd [419:immnd_evt.c:9527] T2 originated here?:1 nodeId:2010f conn: 225
osafimmnd [419:ImmModel.cc:12967] >> implementerSet
osafimmnd [419:ImmModel.cc:13008] T7 Re-using implementer for @whatever
osafimmnd [419:ImmModel.cc:13040] TR TRY_AGAIN: ccb 2 is active on object 
'test=1' bound to class applier '@whatever'. Can not re-attach applier
osafimmnd [419:ImmModel.cc:13156] << implementerSet
~~~~

PL-3

~~~~
osafimmnd [392:immsv_evt.c:5414] T8 Received: IMMND_EVT_D2ND_IMPLSET_RSP (60) 
from 0
osafimmnd [392:immnd_evt.c:9527] T2 originated here?:0 nodeId:2010f conn: 225
osafimmnd [392:ImmModel.cc:12967] >> implementerSet
osafimmnd [392:ImmModel.cc:13008] T7 Re-using implementer for @whatever
osafimmnd [392:ImmModel.cc:13087] NO Implementer (applier) connected: 5 
(@whatever) <0, 2010f>
osafimmnd [392:ImmModel.cc:13156] << implementerSet
~~~~

IMMND on SC-1 rejected the implSet request but IMMND on PL-3 accepted it.
The applier was not synced to PL-3 (mAppliers.empty() returned true) so the 
implSet request passed the ccb check.

                if( ! obj->mClassInfo->mAppliers.empty()) {
                    ImplementerSet::iterator ii = 
obj->mClassInfo->mAppliers.begin();
                    for(; ii != obj->mClassInfo->mAppliers.end(); ++ii) {
                        if((*ii) == info) {
                            TRACE("TRY_AGAIN: ccb %u is active on object '%s' "
                               "bound to class applier '%s'. Can not re-attach 
applier",
                               ccb->mId, omit->first.c_str(), implName.c_str());
                            err = SA_AIS_ERR_TRY_AGAIN;
                            goto done;
                        }
                    }
                }

Now commit the CCB and try to set the applier again.

SC-1

~~~~
osafimmnd [419:immsv_evt.c:5414] T8 Received: IMMND_EVT_D2ND_IMPLSET_RSP (60) 
from 0
osafimmnd [419:immnd_evt.c:9527] T2 originated here?:1 nodeId:2010f conn: 226
osafimmnd [419:ImmModel.cc:12967] >> implementerSet
osafimmnd [419:ImmModel.cc:13008] T7 Re-using implementer for @whatever
osafimmnd [419:ImmModel.cc:13087] NO Implementer (applier) connected: 6 
(@whatever) <226, 2010f>
osafimmnd [419:ImmModel.cc:13156] << implementerSet
~~~~

PL-3

~~~~
osafimmnd [392:immsv_evt.c:5414] T8 Received: IMMND_EVT_D2ND_IMPLSET_RSP (60) 
from 0
osafimmnd [392:immnd_evt.c:9527] T2 originated here?:0 nodeId:2010f conn: 226
osafimmnd [392:ImmModel.cc:12967] >> implementerSet
osafimmnd [392:ImmModel.cc:13003] T7 ERR_EXIST: Registered implementer already 
exists: @whatever
osafimmnd [392:ImmModel.cc:13005] << implementerSet
~~~~

The applier had diferent ids on SC-1 and PL-3. When a new node joins the 
cluster, IMMND on PL-3 will crash when verifying the implementers.

~~~~
PL3 osafimmnd[392]: ER Sync-verify: Established node has different 
Implementer-id: 5 for name: @whatever, sync says 6.
~~~~


---

Sent from sourceforge.net because opensaf-tickets@lists.sourceforge.net is 
subscribed to https://sourceforge.net/p/opensaf/tickets/

To unsubscribe from further messages, a project admin can change settings at 
https://sourceforge.net/p/opensaf/admin/tickets/options.  Or, if this is a 
mailing list, you can unsubscribe from the mailing list.
------------------------------------------------------------------------------
_______________________________________________
Opensaf-tickets mailing list
Opensaf-tickets@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-tickets

Reply via email to