|
From: Anders B. <and...@er...> - 2014-06-09 06:18:00
|
osaf/libs/common/immsv/include/immsv_api.h | 2 +
osaf/services/saf/immsv/immloadd/imm_loader.cc | 10 +++-
osaf/services/saf/immsv/immnd/ImmModel.cc | 24 +++++++++
osaf/services/saf/immsv/immnd/ImmModel.hh | 1 +
samples/immsv/OpensafImm.xml | 64 ++++++++++++++++++++++++++
5 files changed, 99 insertions(+), 2 deletions(-)
A config attribute named 'opensafLongDnsAllowed' is added to the class
'OpensafImm'. The default value is 0 with the intended meaning that
long DNs are not allowed. Any other value has the meaning that long
DNs are allowed. A boolean function 'getLongDnsAllowed()' has been
added to ImmModel. This function will be used by the function
ImmModel::ccbObjectCreate() when it detects that an object proposed
to be created has a DN longer than 255 bytes. The creation will only
be allowed if getLongDnsAllowed() returns true.
Validation of updates to the value of 'opensafLongDnsAllowed' will be
added as part of ticket #934. Transitioning from true to false will
only be allowed if the imm database currently has no object with a long DN.
An imm xml file containing the extended class definition for OpensafImm
has been added at samples/immsv/OpensafImm.xml
The xml file should be used for upgrading the class when older OpenSAF
systems are upgraded to OpenSAF 4.5.
diff --git a/osaf/libs/common/immsv/include/immsv_api.h b/osaf/libs/common/immsv/include/immsv_api.h
--- a/osaf/libs/common/immsv/include/immsv_api.h
+++ b/osaf/libs/common/immsv/include/immsv_api.h
@@ -58,6 +58,8 @@ extern "C" {
#define IMMSV_DEFAULT_MAX_SYNC_BATCH_SIZE MDS_DIRECT_BUF_MAXSIZE
#define IMMSV_MAX_OBJS_IN_SYNCBATCH (MDS_DIRECT_BUF_MAXSIZE/10)
+#define OPENSAF_IMM_LONG_DNS_ALLOWED "opensafLongDnsAllowed"
+
/*Max # of outstanding fevs messages towards director.*/
/*Note max-max is 255. cb->fevs_replies_pending is an uint8_t*/
#define IMMSV_DEFAULT_FEVS_MAX_PENDING 16
diff --git a/osaf/services/saf/immsv/immloadd/imm_loader.cc b/osaf/services/saf/immsv/immloadd/imm_loader.cc
--- a/osaf/services/saf/immsv/immloadd/imm_loader.cc
+++ b/osaf/services/saf/immsv/immloadd/imm_loader.cc
@@ -283,9 +283,10 @@ void opensafClassCreate(SaImmHandleT imm
{
SaAisErrorT err = SA_AIS_OK;
int retries=0;
- SaImmAttrDefinitionT_2 d1, d2, d3, d4, d5;
+ SaImmAttrDefinitionT_2 d1, d2, d3, d4, d5, d6;
SaUint32T nost_flags_default = 0;
SaUint32T batch_size_default = IMMSV_DEFAULT_MAX_SYNC_BATCH_SIZE;
+ SaUint32T extended_names_enabled_default = 0;
d1.attrName = (char *) OPENSAF_IMM_ATTR_RDN;
d1.attrValueType = SA_IMM_ATTR_SANAMET;
@@ -313,7 +314,12 @@ void opensafClassCreate(SaImmHandleT imm
d5.attrFlags = SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE;
d5.attrDefaultValue = &batch_size_default;
- const SaImmAttrDefinitionT_2* attrDefs[6] = {&d1, &d2, &d3, &d4, &d5, 0};
+ d6.attrName = (char *) OPENSAF_IMM_LONG_DNS_ALLOWED;
+ d6.attrValueType = SA_IMM_ATTR_SAUINT32T;
+ d6.attrFlags = SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE;
+ d6.attrDefaultValue = &extended_names_enabled_default;
+
+ const SaImmAttrDefinitionT_2* attrDefs[7] = {&d1, &d2, &d3, &d4, &d5, &d6, 0};
do {/* Create the class */
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -439,6 +439,7 @@ static const std::string immClassName(OP
static const std::string immAttrNostFlags(OPENSAF_IMM_ATTR_NOSTD_FLAGS);
static const std::string immSyncBatchSize(OPENSAF_IMM_SYNC_BATCH_SIZE);
static const std::string immPbeBSlaveName(OPENSAF_IMM_2PBE_APPL_NAME);
+static const std::string immLongDnsAllowed(OPENSAF_IMM_LONG_DNS_ALLOWED);
static const std::string immManagementDn("safRdn=immManagement,safApp=safImmService");
static const std::string saImmRepositoryInit("saImmRepositoryInit");
@@ -2530,6 +2531,29 @@ ImmModel::getMaxSyncBatchSize()
return mbSize;
}
+bool
+ImmModel::getLongDnsAllowed()
+{
+ TRACE_ENTER();
+ bool longDnsAllowed = false;
+ ObjectMap::iterator oi = sObjectMap.find(immObjectDn);
+ if(oi == sObjectMap.end()) {
+ TRACE_LEAVE();
+ return false;
+ }
+
+ ObjectInfo* immObject = oi->second;
+ ImmAttrValueMap::iterator avi =
+ immObject->mAttrValueMap.find(immLongDnsAllowed);
+ if(avi != immObject->mAttrValueMap.end()) {
+ osafassert(!(avi->second->isMultiValued()));
+ ImmAttrValue* valuep = avi->second;
+ longDnsAllowed = (valuep->getValue_int() != 0);
+ }
+ TRACE_LEAVE();
+ return longDnsAllowed;
+}
+
/**
* Fetches the nodeId and possibly connection id for the
* implementer connected to the class OPENSAF_IMM_CLASS_NAME.
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.hh b/osaf/services/saf/immsv/immnd/ImmModel.hh
--- a/osaf/services/saf/immsv/immnd/ImmModel.hh
+++ b/osaf/services/saf/immsv/immnd/ImmModel.hh
@@ -483,6 +483,7 @@ public:
SaImmRepositoryInitModeT getRepositoryInitMode();
unsigned int getMaxSyncBatchSize();
+ bool getLongDnsAllowed();
void prepareForLoading();
bool readyForLoading();
void prepareForSync(bool isJoining);
diff --git a/samples/immsv/OpensafImm.xml b/samples/immsv/OpensafImm.xml
new file mode 100644
--- /dev/null
+++ b/samples/immsv/OpensafImm.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<imm:IMM-contents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SAI-AIS-IMM-XSD-A.02.13.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:imm="http://www.saforum.org/IMMSchema">
+ <class name="OpensafImm">
+ <category>SA_CONFIG</category>
+ <rdn>
+ <name>opensafImm</name>
+ <type>SA_NAME_T</type>
+ <category>SA_CONFIG</category>
+ <flag>SA_INITIALIZED</flag>
+ </rdn>
+ <attr>
+ <name>opensafLongDnsAllowed</name>
+ <type>SA_UINT32_T</type>
+ <category>SA_CONFIG</category>
+ <flag>SA_WRITABLE</flag>
+ <default-value>0</default-value>
+ </attr>
+ <attr>
+ <name>opensafImmSyncBatchSize</name>
+ <type>SA_UINT32_T</type>
+ <category>SA_CONFIG</category>
+ <flag>SA_WRITABLE</flag>
+ <default-value>65479</default-value>
+ </attr>
+ <attr>
+ <name>opensafImmNostdFlags</name>
+ <type>SA_UINT32_T</type>
+ <category>SA_RUNTIME</category>
+ <flag>SA_CACHED</flag>
+ <default-value>0</default-value>
+ </attr>
+ <attr>
+ <name>opensafImmEpoch</name>
+ <type>SA_UINT32_T</type>
+ <category>SA_RUNTIME</category>
+ <flag>SA_PERSISTENT</flag>
+ <flag>SA_CACHED</flag>
+ </attr>
+ <attr>
+ <name>opensafImmClassNames</name>
+ <type>SA_STRING_T</type>
+ <category>SA_RUNTIME</category>
+ <flag>SA_MULTI_VALUE</flag>
+ <flag>SA_PERSISTENT</flag>
+ <flag>SA_CACHED</flag>
+ </attr>
+ <attr>
+ <name>SaImmAttrImplementerName</name>
+ <type>SA_STRING_T</type>
+ <category>SA_CONFIG</category>
+ </attr>
+ <attr>
+ <name>SaImmAttrClassName</name>
+ <type>SA_STRING_T</type>
+ <category>SA_CONFIG</category>
+ <default-value>OpensafImm</default-value>
+ </attr>
+ <attr>
+ <name>SaImmAttrAdminOwnerName</name>
+ <type>SA_STRING_T</type>
+ <category>SA_CONFIG</category>
+ </attr>
+ </class>
+</imm:IMM-contents>
|