Hi Canh Ack
Thanks Lennart > -----Original Message----- > From: Canh Van Truong [mailto:canh.v.tru...@dektech.com.au] > Sent: den 28 september 2017 09:27 > To: Lennart Lund <lennart.l...@ericsson.com>; Minh Hon Chau > <minh.c...@dektech.com.au> > Cc: opensaf-devel@lists.sourceforge.net; Canh Van Truong > <canh.v.tru...@dektech.com.au> > Subject: [PATCH 1/1] ntf: fix incorrect handling of version when initializing > OpenSAF APIs in ntf service [#2517] > > The version used when initializing the API is in many cases stored in a global > variable and this global variable is used every time the API is initialized. > The version is given as a pointer to this variable. The problem is that this > variable is defined as an [in/out] parameter that gives the version to use > when > initializing [in] but the value shall be changed by the agent to the highest > version supported by the initialized service [out]. This means that the next > time the API is initialized it may be initialized with a higher version. > > This patch help to fix that always initialize OpenSaf API with correct > version in > ntf service. > --- > src/ntf/ntfd/NtfLogger.cc | 6 ++++-- > src/ntf/ntfd/ntfs_clm.c | 11 ++++++++--- > src/ntf/ntfimcnd/ntfimcn_imm.c | 8 +++++--- > src/ntf/ntfimcnd/ntfimcn_notifier.c | 4 +++- > src/ntf/tools/ntfclient.c | 4 +++- > 5 files changed, 23 insertions(+), 10 deletions(-) > > diff --git a/src/ntf/ntfd/NtfLogger.cc b/src/ntf/ntfd/NtfLogger.cc > index 84014b578..6e8009768 100644 > --- a/src/ntf/ntfd/NtfLogger.cc > +++ b/src/ntf/ntfd/NtfLogger.cc > @@ -66,9 +66,9 @@ void saLogWriteLogCallback(SaInvocationT invocation, > SaAisErrorT error); > > static SaLogCallbacksT logCallbacks = {NULL, NULL, saLogWriteLogCallback}; > > -static SaVersionT logVersion = {'A', 2, 1}; > static SaLogHandleT logHandle; > static SaLogStreamHandleT alarmStreamHandle; > +const SaVersionT kLogVersion = {'A', 2, 3}; > > NtfLogger::NtfLogger() : readCounter(0) { > if (SA_AIS_OK != initLog()) { > @@ -247,18 +247,20 @@ SaAisErrorT NtfLogger::initLog() { > SaNameT alarmStreamName; > osaf_extended_name_lend(SA_LOG_STREAM_ALARM, > &alarmStreamName); > int first_try = 1; > + SaVersionT log_version = kLogVersion; > > TRACE_ENTER(); > > /* Initialize the Log service */ > do { > - result = saLogInitialize(&logHandle, &logCallbacks, &logVersion); > + result = saLogInitialize(&logHandle, &logCallbacks, &log_version); > if (SA_AIS_ERR_TRY_AGAIN == result) { > if (first_try) { > LOG_WA("saLogInitialize returns try again, retries..."); > first_try = 0; > } > usleep(AIS_TIMEOUT); > + log_version = kLogVersion; > } > } while (SA_AIS_ERR_TRY_AGAIN == result); > > diff --git a/src/ntf/ntfd/ntfs_clm.c b/src/ntf/ntfd/ntfs_clm.c > index 1f63def8f..b0b51ba83 100644 > --- a/src/ntf/ntfd/ntfs_clm.c > +++ b/src/ntf/ntfd/ntfs_clm.c > @@ -18,6 +18,9 @@ > #include "ntf/ntfd/ntfs_com.h" > #include "base/osaf_time.h" > > +const SaVersionT kClmVersion = {'B', 0x04, 0x01}; > + > + > /* > * @brief CLM callback for tracking node membership status. > * Depending upon the membership status (joining/leaving cluster) > @@ -99,7 +102,6 @@ done: > return; > } > > -static SaVersionT clmVersion = {'B', 0x04, 0x01}; > static const SaClmCallbacksT_4 clm_callbacks = { > 0, ntfs_clm_track_cbk /*saClmClusterTrackCallback*/ > }; > @@ -113,15 +115,18 @@ void *ntfs_clm_init_thread(void *cb) > { > ntfs_cb_t *_ntfs_cb = (ntfs_cb_t *)cb; > SaAisErrorT rc = SA_AIS_OK; > + SaVersionT clm_version = kClmVersion; > > TRACE_ENTER(); > > - rc = saClmInitialize_4(&_ntfs_cb->clm_hdl, &clm_callbacks, > &clmVersion); > + rc = saClmInitialize_4(&_ntfs_cb->clm_hdl, &clm_callbacks, > + &clm_version); > while ((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == > SA_AIS_ERR_TIMEOUT) || > (rc == SA_AIS_ERR_UNAVAILABLE)) { > osaf_nanosleep(&kHundredMilliseconds); > + clm_version = kClmVersion; > rc = saClmInitialize_4(&_ntfs_cb->clm_hdl, &clm_callbacks, > - &clmVersion); > + &clm_version); > } > if (rc != SA_AIS_OK) { > LOG_ER("saClmInitialize failed with error: %d", rc); > diff --git a/src/ntf/ntfimcnd/ntfimcn_imm.c > b/src/ntf/ntfimcnd/ntfimcn_imm.c > index de96e3020..8fbb8a037 100644 > --- a/src/ntf/ntfimcnd/ntfimcn_imm.c > +++ b/src/ntf/ntfimcnd/ntfimcn_imm.c > @@ -50,7 +50,7 @@ extern ntfimcn_cb_t ntfimcn_cb; /* See ntfimcn_main.c > */ > * Global, scope file > */ > /* Release code, major version, minor version */ > -#define IMM_VERSION {'A', 2, 12} > +static const SaVersionT kImmVersion = {'A', 2, 12}; > static const uint64_t sleep_delay_ms = 500; > static const uint64_t max_waiting_time_7s = (7 * 1000); /* 7 sec */ > static const uint64_t max_waiting_time_60s = (60 * 1000); /* 60 sec */ > @@ -784,7 +784,7 @@ int ntfimcn_imm_init(ntfimcn_cb_t *cb) > goto done; > } > cb->immOiHandle = 0; > - SaVersionT imm_version = IMM_VERSION; > + SaVersionT imm_version = kImmVersion; > rc = saImmOiInitialize_2(&cb->immOiHandle, &callbacks, > &imm_version); > while ( > @@ -805,6 +805,7 @@ int ntfimcn_imm_init(ntfimcn_cb_t *cb) > } > } > cb->immOiHandle = 0; > + imm_version = kImmVersion; > rc = saImmOiInitialize_2(&cb->immOiHandle, > &callbacks, > &imm_version); > } > @@ -927,7 +928,7 @@ static bool initializeImmOmHandle(SaImmHandleT* > immOmHandle) { > struct timespec delay_ts; > SaAisErrorT ais_rc; > bool internal_rc = true; > - SaVersionT imm_version = IMM_VERSION; > + SaVersionT imm_version = kImmVersion; > > osaf_millis_to_timespec(sleep_delay_ms, &delay_ts); > osaf_set_millis_timeout(max_waiting_time_60s, &timeout_ts); > @@ -939,6 +940,7 @@ static bool initializeImmOmHandle(SaImmHandleT* > immOmHandle) { > break; > } > osaf_nanosleep(&delay_ts); > + imm_version = kImmVersion; > } > > if (ais_rc != SA_AIS_OK) { > diff --git a/src/ntf/ntfimcnd/ntfimcn_notifier.c > b/src/ntf/ntfimcnd/ntfimcn_notifier.c > index 9aba87cb6..5622126fb 100644 > --- a/src/ntf/ntfimcnd/ntfimcn_notifier.c > +++ b/src/ntf/ntfimcnd/ntfimcn_notifier.c > @@ -39,7 +39,7 @@ > #include "ntfimcn_main.h" > > /* Release code, major version, minor version */ > -SaVersionT ntf_version = {'A', 0x01, 0x01}; > +const SaVersionT kNtfVersion = {'A', 0x01, 0x01}; > const unsigned int sleep_delay_ms = 500; > const unsigned int max_waiting_time_ms = 7 * 1000; /* 7 secs */ > const unsigned int max_init_waiting_time_ms = 60 * 1000; /* 60 secs */ > @@ -60,6 +60,7 @@ int ntfimcn_ntf_init(ntfimcn_cb_t *cb) > { > SaAisErrorT rc; > int internal_rc = 0; > + SaVersionT ntf_version = kNtfVersion; > > TRACE_ENTER(); > > @@ -86,6 +87,7 @@ int ntfimcn_ntf_init(ntfimcn_cb_t *cb) > } > } > cb->ntf_handle = 0; > + ntf_version = kNtfVersion; > rc = saNtfInitialize(&cb->ntf_handle, NULL, > &ntf_version); > } > diff --git a/src/ntf/tools/ntfclient.c b/src/ntf/tools/ntfclient.c > index dcc957b7f..472be4bc3 100644 > --- a/src/ntf/tools/ntfclient.c > +++ b/src/ntf/tools/ntfclient.c > @@ -1099,11 +1099,13 @@ SaAisErrorT ntftool_saNtfInitialize(SaNtfHandleT > *ntfHandle, > { > int curRetryTime = 0; > SaAisErrorT rc; > + SaVersionT ntf_version = *version; > do { > - rc = saNtfInitialize(ntfHandle, ntfCallbacks, version); > + rc = saNtfInitialize(ntfHandle, ntfCallbacks, &ntf_version); > if (rc == SA_AIS_ERR_TRY_AGAIN) { > sleep(gl_apiRetry); > curRetryTime += gl_apiRetry; > + ntf_version = *version; > } else > break; > } while (curRetryTime < gl_apiTolerance); > -- > 2.13.0 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel