Skip to content

Commit

Permalink
Utilize the module registry
Browse files Browse the repository at this point in the history
To decrease the ZIS LPA footprint, ZIS will use the module registry for
its plug-in modules. When not in dev mode, ZIS will use the module
registry API for adding plug-in modules to the LPA, and if a module is
already registered, ZIS will reuse the existing LPA info. In dev mode,
ZIS will load its own copy of plug-in modules to the LPA, just as it
does now.

Signed-off-by: Irek Fakhrutdinov <[email protected]>
  • Loading branch information
ifakhrutdinov committed Sep 27, 2024
1 parent a00d2a6 commit 6567ef5
Show file tree
Hide file tree
Showing 11 changed files with 84 additions and 10 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

All notable changes to the ZSS package will be documented in this file.

## `3.1.0`
- Enhancement: module registry (#732)

## `3.0.0`
- Enhancement: if no `zowe.logDirectory` is defined in config, logging is disabled. (#726)
- Bugfix: Support cross-memory server parameters longer than 128 characters (#684)
Expand Down
6 changes: 6 additions & 0 deletions build/build_dynamic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,15 @@ xlc -S -M -qmetal -q64 -DSUBPOOL=132 -DMETTLE=1 -DMSGPREFIX=\"ZWE\" \
-DZISDYN_REVISION="$micro" \
-DZISDYN_VERSION_DATE_STAMP="$date_stamp" \
-DZISDYN_PLUGIN_VERSION=${DYNLINK_PLUGIN_VERSION} \
-DLPA_LOG_DEBUG_MSG_ID=\"ZWES0100I\" \
-DMODREG_LOG_DEBUG_MSG_ID=\"ZWES0100I\" \
-qreserved_reg=r12 \
-DRCVR_CPOOL_STATES \
-DHAVE_METALIO=1 \
-Wc,langlvl\(extc99\),arch\(8\),agg,exp,list\(\),so\(\),off,xref,roconst,longname,lp64 \
-I ${COMMON}/h -I ${ZSS}/h \
-I ${ZSS}/zis-aux/include -I ${ZSS}/zis-aux/src \
-I /usr/include/zos \
${ZSS}/c/zis/zisdynamic.c \
${ZSS}/c/zis/server-api.c \
${ZSS}/c/zis/client.c \
Expand All @@ -81,6 +84,7 @@ xlc -S -M -qmetal -q64 -DSUBPOOL=132 -DMETTLE=1 -DMSGPREFIX=\"ZWE\" \
${COMMON}/c/logging.c \
${COMMON}/c/lpa.c \
${COMMON}/c/metalio.c \
${COMMON}/c/modreg.c \
${COMMON}/c/nametoken.c \
${COMMON}/c/pause-element.c \
${COMMON}/c/pc.c \
Expand Down Expand Up @@ -125,6 +129,7 @@ for file in \
logging \
lpa \
metalio \
modreg \
nametoken \
pause-element \
pc \
Expand Down Expand Up @@ -173,6 +178,7 @@ le.o \
logging.o \
lpa.o \
metalio.o \
modreg.o \
nametoken.o \
pause-element.o \
pc.o \
Expand Down
8 changes: 7 additions & 1 deletion build/build_zis.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,12 @@ xlc -S -M -qmetal -q64 -DSUBPOOL=132 -DMETTLE=1 -DMSGPREFIX=\"ZWE\" \
-DZIS_VERSION_DATE_STAMP="$date_stamp" \
-DRADMIN_XMEM_MODE \
-DRCVR_CPOOL_STATES \
-DLPA_LOG_DEBUG_MSG_ID=\"ZWES0100I\" \
-DMODREG_LOG_DEBUG_MSG_ID=\"ZWES0100I\" \
-qreserved_reg=r12 \
-Wc,arch\(8\),agg,exp,list\(\),so\(\),off,xref,roconst,longname,lp64 \
-I ${COMMON}/h -I ${ZSS}/h -I ${ZSS}/zis-aux/include -I ${ZSS}/zis-aux/src \
-I /usr/include/zos \
${COMMON}/c/alloc.c \
${COMMON}/c/as.c \
${COMMON}/c/cellpool.c \
Expand All @@ -70,6 +73,7 @@ xlc -S -M -qmetal -q64 -DSUBPOOL=132 -DMETTLE=1 -DMSGPREFIX=\"ZWE\" \
${COMMON}/c/logging.c \
${COMMON}/c/lpa.c \
${COMMON}/c/metalio.c \
${COMMON}/c/modreg.c \
${COMMON}/c/mtlskt.c \
${COMMON}/c/nametoken.c \
${COMMON}/c/pause-element.c \
Expand Down Expand Up @@ -102,7 +106,7 @@ xlc -S -M -qmetal -q64 -DSUBPOOL=132 -DMETTLE=1 -DMSGPREFIX=\"ZWE\" \
${ZSS}/zis-aux/src/aux-host.c

for file in \
alloc as cellpool cmutils collections crossmemory isgenq le logging lpa metalio mtlskt nametoken \
alloc as cellpool cmutils collections crossmemory isgenq le logging lpa metalio modreg mtlskt nametoken \
pause-element pc qsam radmin recovery resmgr scheduling shrmem64 stcbase timeutls utils xlate \
zos zvt \
parm plugin server server-api service \
Expand All @@ -125,6 +129,7 @@ ld -V -b ac=1 -b rent -b case=mixed -b map -b xref -b reus \
logging.o \
lpa.o \
metalio.o \
modreg.o \
mtlskt.o \
nametoken.o \
qsam.o \
Expand Down Expand Up @@ -165,6 +170,7 @@ ld -V -b ac=1 -b rent -b case=mixed -b map -b xref -b reus \
logging.o \
lpa.o \
metalio.o \
modreg.o \
mtlskt.o \
nametoken.o \
pause-element.o \
Expand Down
4 changes: 4 additions & 0 deletions c/zis/server-api.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ _Bool zisIsLPADevModeOn(const ZISContext *context) {
return (context->cmsFlags & devFlags) || ZIS_LPA_DEV_MODE;
}

_Bool zisIsModregOn(const ZISContext *context) {
return context->cmsFlags & CMS_SERVER_FLAG_USE_MODREG;
}

void zisGetServerVersion(int *major, int *minor, int *revision) {
*major = -1;
*minor = -1;
Expand Down
44 changes: 37 additions & 7 deletions c/zis/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include "stcbase.h"
#include "utils.h"
#include "recovery.h"
#include "modreg.h"

#include "zis/message.h"
#include "zis/parm.h"
Expand Down Expand Up @@ -70,6 +71,9 @@ See details in the ZSS Cross Memory Server installation guide
#define ZIS_PARM_DEBUG_MODE "DEBUG"
#define ZIS_PARM_RESET_LOOKUP "RESET(LOOKUP)"

#define ZIS_PARM_MODREG "MODULE_REGISTRY"
#define ZIS_PARM_MODREG_OFF "NO"

#define ZIS_PARM_PCSS_STACK_POOL_SIZE CMS_PROD_ID".PCSS_STACK_POOL_SIZE"
#define ZIS_PCSS_STACK_POOL_DEFAULT_SIZSE 1024
#define ZIS_PARM_PCSS_RECOVERY_POOL_SIZE CMS_PROD_ID".PCSS_RECOVERY_POOL_SIZE"
Expand Down Expand Up @@ -679,12 +683,33 @@ static int relocatePluginToLPAIfNeeded(ZISContext *context,
if (!lpaPresent) {

EightCharString ddname = {"STEPLIB "};
int lpaRSN = 0;
int lpaRC = lpaAdd(&anchor->moduleInfo, &ddname, &moduleName, &lpaRSN);
if (lpaRC != 0) {
zowelog(NULL, LOG_COMP_ID_CMS, ZOWE_LOG_SEVERE, ZIS_LOG_LPA_FAILURE_MSG,
"ADD", anchor->moduleInfo.inputInfo.name, lpaRC, lpaRSN);
return RC_ZIS_ERROR;

if (zisIsModregOn(context) && !zisIsLPADevModeOn(context)) {
uint64_t modregRSN;
int modregRC = modregRegister(ddname, moduleName, &anchor->moduleInfo,
&modregRSN);
if (modregRC == RC_MODREG_OK) {
lpaPresent = true;
} else if (modregRC == RC_MODREG_MARK_MISSING) {
zowelog(NULL, LOG_COMP_ID_CMS, ZOWE_LOG_INFO,
ZIS_LOG_MODREG_NO_MARK_MSG, moduleName.text);
} else {
zowelog(NULL, LOG_COMP_ID_CMS, ZOWE_LOG_SEVERE,
ZIS_LOG_MODREG_FAILURE_MSG, moduleName.text,
modregRC, modregRSN);
return RC_ZIS_ERROR;
}
}

if (!lpaPresent) {
int lpaRSN = 0;
int lpaRC = lpaAdd(&anchor->moduleInfo, &ddname, &moduleName, &lpaRSN);
if (lpaRC != 0) {
zowelog(NULL, LOG_COMP_ID_CMS, ZOWE_LOG_SEVERE,
ZIS_LOG_LPA_FAILURE_MSG,
"ADD", moduleName.text, lpaRC, lpaRSN);
return RC_ZIS_ERROR;
}
}

anchor->flags |= ZIS_PLUGIN_ANCHOR_FLAG_LPA;
Expand Down Expand Up @@ -1443,7 +1468,7 @@ static int loadConfig(ZISContext *context,

static int getCMSConfigFlags(const ZISParmSet *zisParms) {

int flags = CMS_SERVER_FLAG_NONE;
int flags = CMS_SERVER_FLAG_USE_MODREG;

const char *coldStartValue = zisGetParmValue(zisParms, ZIS_PARM_COLD_START);
if (coldStartValue && strlen(coldStartValue) == 0) {
Expand Down Expand Up @@ -1475,6 +1500,11 @@ static int getCMSConfigFlags(const ZISParmSet *zisParms) {
flags |= CMS_SERVER_FLAG_RESET_LOOKUP;
}

const char *modregMode = zisGetParmValue(zisParms, ZIS_PARM_MODREG);
if (modregMode && !strcmp(devMode, ZIS_PARM_MODREG_OFF)) {
flags &= ~CMS_SERVER_FLAG_USE_MODREG;
}

return flags;
}

Expand Down
2 changes: 2 additions & 0 deletions c/zis/stubinit.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
stubVector[ZIS_STUB_ZISDYNPV] = (void*)zisdynGetPluginVersion;
stubVector[ZIS_STUB_ZISGVRSN] = (void*)zisGetServerVersion;
stubVector[ZIS_STUB_ZISLPADV] = (void*)zisIsLPADevModeOn;
stubVector[ZIS_STUB_ZISMDREG] = (void*)zisIsModregOn;
stubVector[ZIS_STUB_ZISCSRVC] = (void*)zisCallService;
stubVector[ZIS_STUB_ZISCUSVC] = (void*)zisCallServiceUnchecked;
stubVector[ZIS_STUB_ZISCVSVC] = (void*)zisCallVersionedService;
Expand Down Expand Up @@ -558,6 +559,7 @@
stubVector[ZIS_STUB_ZVTFENTR] = (void*)zvtFreeEntry;
stubVector[ZIS_STUB_ZVTGXMLR] = (void*)zvtGetCMSLookupRoutineAnchor;
stubVector[ZIS_STUB_ZVTSXMLR] = (void*)zvtSetCMSLookupRoutineAnchor;
stubVector[ZIS_STUB_MODRRGST] = (void*)modregRegister;
/*
This program and the accompanying materials are
made available under the terms of the Eclipse Public License v2.0 which accompanies
Expand Down
3 changes: 3 additions & 0 deletions c/zis/zisdynamic.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include "logging.h"
#include "lpa.h"
#include "metalio.h"
#include "modreg.h"
#include "nametoken.h"
#include "pause-element.h"
#include "pc.h"
Expand Down Expand Up @@ -423,6 +424,8 @@ static int verifyZISVersion(void) {

ZISPlugin *getPluginDescriptor(void) {

MODREG_MARK_MODULE();

if (verifyZISVersion() != 0) {
return NULL;
}
Expand Down
2 changes: 1 addition & 1 deletion deps/zowe-common-c
8 changes: 8 additions & 0 deletions h/zis/message.h
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,14 @@
#define ZIS_LOG_CXMS_MOD_NAME_FAILED_MSG_TEXT "ZSS Cross-Memory server module member name not determined, RC = %d"
#define ZIS_LOG_CXMS_MOD_NAME_FAILED_MSG ZIS_LOG_CXMS_MOD_NAME_FAILED_MSG_ID" "ZIS_LOG_CXMS_MOD_NAME_FAILED_MSG_TEXT

#define ZIS_LOG_MODREG_NO_MARK_MSG_ID ZIS_MSG_PRFX"022I"
#define ZIS_LOG_MODREG_NO_MARK_MSG_TEXT "Module %-8.8s no eligible for registry, proceeding with LPA ADD"
#define ZIS_LOG_MODREG_NO_MARK_MSG ZIS_LOG_MODREG_NO_MARK_MSG_ID" "ZIS_LOG_MODREG_NO_MARK_MSG_TEXT

#define ZIS_LOG_MODREG_FAILURE_MSG_ID ZIS_MSG_PRFX"023E"
#define ZIS_LOG_MODREG_FAILURE_MSG_TEXT "Module %-8.8s not registered, RC = %d, RSN = 0x%016X"
#define ZIS_LOG_MODREG_FAILURE_MSG ZIS_LOG_MODREG_FAILURE_MSG_ID" "ZIS_LOG_MODREG_FAILURE_MSG_TEXT

/* ZIS AUX messages */

#define ZISAUX_LOG_STARTUP_MSG_ID ZIS_MSG_PRFX"0050I"
Expand Down
8 changes: 8 additions & 0 deletions h/zis/server-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

#pragma map(zisGetServerVersion, "ZISGVRSN")
#pragma map(zisIsLPADevModeOn, "ZISLPADV")
#pragma map(zisIsModregOn, "ZISMDREG")

/**
* Get the version of ZIS. In case of failure, all the results are set to -1.
Expand All @@ -36,6 +37,13 @@ struct ZISContext_tag;
*/
_Bool zisIsLPADevModeOn(const struct ZISContext_tag *context);

/**
* Check if the module registry is enabled for ZIS.
* @param[in] context The server context.
* @return @c true if on, otherwise @c false.
*/
_Bool zisIsModregOn(const struct ZISContext_tag *context);

#endif /* ZIS_SERVER_API_H_ */

/*
Expand Down
6 changes: 5 additions & 1 deletion h/zis/zisstubs.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
FULL BACKWARD COMPATIBILITY MUST BE MAINTAINED
*/

#define ZIS_STUBS_VERSION 4
#define ZIS_STUBS_VERSION 5

/*
How does a user check for compatibility?
Expand Down Expand Up @@ -48,6 +48,7 @@
#define ZIS_STUB_ZISDYNPV 2 /* zisdynGetPluginVersion mapped */
#define ZIS_STUB_ZISGVRSN 3 /* zisGetServerVersion mapped */
#define ZIS_STUB_ZISLPADV 4 /* zisIsLPADevModeOn mapped */
#define ZIS_STUB_ZISMDREG 5 /* zisIsModregOn mapped */

/* zis/client, 50-79 */
#define ZIS_STUB_ZISCSRVC 50 /* zisCallService */
Expand Down Expand Up @@ -693,6 +694,9 @@
#define ZIS_STUB_ZVTGXMLR 904 /* zvtGetCMSLookupRoutineAnchor mapped */
#define ZIS_STUB_ZVTSXMLR 905 /* zvtSetCMSLookupRoutineAnchor mapped */

/* modreg, 915-920 */
#define ZIS_STUB_MODRRGST 915 /* modregRegister mapped */

#endif /* ZIS_ZISSTUBS_H_ */

/*
Expand Down

0 comments on commit 6567ef5

Please sign in to comment.