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>
------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://www.hpccsystems.com
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel