The problem is the feature of *implicit* class-implementer-set and *implicit*
object-implementer-set.
Ironically this feature is parctically useless for appliers.
One possible (and relatively simple) solution would be to only do the ccb
interference checks for
*appliers* at the node where the applier is actually attaching. That would
almost be in
fevs_local_checks, except that implementer-set is not a regular fevs message at
the sending side.
So instad it would be in immnd_evt_proc_impl_set in immnd_evt.c.
If the check fails then the local IMMND simply rejects the request with
TRY_AGAIN (or ERR_BUSY
would in reality be better here since the immsv has no control over how long
the wait will be).
The current applier check at the fevs receiving side for implementer-set is
simply removed.
---
** [tickets:#1504] imm: Appliers for classes and objects are not synced to
sync-client**
**Status:** assigned
**Milestone:** 4.5.2
**Created:** Mon Sep 28, 2015 04:15 AM UTC by Hung Nguyen
**Last Updated:** Mon Sep 28, 2015 08:44 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