On Mon, May 7, 2018, at 15:08, Robert Story wrote: > On Mon, 07 May 2018 11:44:59 -0500 Mark wrote: > MF> The HOST-RESOURCES-MIB::hrSWInstalled support for FreeBSD pkg > MF> stops working after so many queries and requires an snmpd > MF> process restart. I have been observing this for quite some time > MF> and have only recently started to debug it. The code in > MF> question is at: > MF> > MF> agent/mibgroup/host/data_access/swinst_pkginfo.c > MF> > MF> When debugging I see it throw either: > MF> > MF> snmp_log( LOG_ERR, "SWInst: error initializing pkgng db\n" ); > MF> > MF> or > MF> > MF> snmp_log( LOG_ERR, "SWInst: error opening pkgng db\n" ); > MF> > MF> neither of which should be true as nothing on the system > MF> changes. After seeing one of these for a few times there are no > MF> further messages [...] > > Can you run with "-Dswinst:load:arch --logTimestamp=yes", and > then run "grep -i swinst" on the log file and send it? > > MF> Could anyone provide any possible insight or ideas on what > MF> could be the issue here? I have compared the code with that > MF> used internally in FreeBSD pkg tool and it's nearly identical. > MF> The only thing that I felt was missing was declaring a readonly > MF> lock on the database but even adding that into the snmp code > MF> had no effect... > > There are quite a few places that don't clean up properly before > returning, but that should only affect error paths. > > You can also try this patch to see if you get more useful debug > info: > > diff --git a/agent/mibgroup/host/data_access/swinst_pkginfo.c b/agent/ > mibgroup/host/data_access/swinst_pkginfo.c > index 861d79f0f..de2abf19b 100644 > --- a/agent/mibgroup/host/data_access/swinst_pkginfo.c > +++ b/agent/mibgroup/host/data_access/swinst_pkginfo.c > @@ -118,12 +118,15 @@ netsnmp_swinst_arch_load( netsnmp_container > *container, u_int flags) > > if (pkgdb_open(&db, PKGDB_DEFAULT) != EPKG_OK) { > snmp_log( LOG_ERR, "SWInst: error opening pkgng db\n" ); > + pkg_shutdown(); > return 1; > } > > if (pkg_status(NULL) == PKG_STATUS_ACTIVE) { > pkgng = 1; > } else { > + pkgdb_close(db); > + pkg_shutdown(); > snmp_log( LOG_INFO, "SWInst: not a pkgng system\n" ); > } > > @@ -131,9 +134,12 @@ netsnmp_swinst_arch_load( netsnmp_container > *container, u_int flags) > if (pkgng) { > if ((it = pkgdb_query(db, NULL, MATCH_ALL)) == NULL) { > snmp_log( LOG_ERR, "SWInst: error querying pkgng db\n" ); > + pkgdb_close(db); > + pkg_shutdown(); > return 1; > } > > + DEBUGMSGTL(("swinst:load:arch"," pkgdb available\n")); > while (pkgdb_it_next(it, &pkg, PKG_LOAD_BASIC) == EPKG_OK) { > pkg_snprintf(pkgname, sizeof(pkgname), "%n-%v", pkg, pkg); > pkg_snprintf(pkgdate, sizeof(pkgdate), "%t", pkg); > @@ -162,13 +168,18 @@ netsnmp_swinst_arch_load( netsnmp_container > *container, u_int flags) > } else { > #endif /* HAVE_LIBPKG */ > if ( !pkg_directory[0] ) { > + NETSNMP_LOGONCE(LOG_ERR, "SWInst: no pkg_directory > available\n"); > return 1; /* Can't report installed packages > if there isn't a list of them! */ > } > > + DEBUGMSGTL(("swinst:load:arch"," pkgdb available\n")); > d = opendir( pkg_directory ); > - if (!d) > + if (!d) { > + snmp_log( LOG_ERR, "SWInst: error querying pkg_directory %s\n", > + pkg_directory ); > return 1; > + } > > while ((dp = readdir(d)) != NULL) { > if ( '.' == dp->d_name[0] )
Hi Robert, I had to tweak your patch slightly, but this is the result showing it working and then suddenly it stops. 2018-05-11 17:11:42 -- hrSWInstalledDate.241 2018-05-11 17:11:42 -- hrSWInstalledDate.242 2018-05-11 17:11:42 -- hrSWInstalledDate.243 2018-05-11 17:11:42 -- hrSWInstalledDate.244 2018-05-11 17:11:42 -- hrSWInstalledDate.245 2018-05-11 17:11:42 -- hrSWInstalledDate.246 2018-05-11 17:11:42 -- hrSWInstalledDate.247 2018-05-11 17:11:42 -- hrSWInstalledDate.248 2018-05-11 17:11:43 -- hrSWInstalled 2018-05-11 17:11:43 SWInst: error opening pkgng db 2018-05-11 17:11:43 -- hrSWInstalled 2018-05-11 17:11:50 -- hrSWInstalled 2018-05-11 17:11:50 -- hrSWInstalled 2018-05-11 17:11:58 -- hrSWInstalled 2018-05-11 17:11:58 -- hrSWInstalled 2018-05-11 17:12:02 -- hrSWInstalled 2018-05-11 17:12:02 -- hrSWInstalled Patch change was NETSNMP_LOGONCE() -> snmp_log() because it didn't like it: host/data_access/swinst_pkginfo.c:170:38: error: too many arguments provided to function-like macro invocation NETSNMP_LOGONCE(LOG_ERR, "SWInst: no pkg_directory available\n"); Thanks for your time. Mark -- Mark Felder ports-secteam & portmgr member f...@freebsd.org ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Net-snmp-coders mailing list Net-snmp-coders@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/net-snmp-coders