Пример #1
0
static void
_h(void)
{
    int		sts;
    int		inst;
    int		i;

    indom = pmInDom_build(FORQA, 17);

    sts = pmdaCacheOp(indom, PMDA_CACHE_LOAD);
    if (sts < 0) {
	fprintf(stderr, "PMDA_CACHE_LOAD failed: %s\n", pmErrStr(sts));
	return;
    }

    for (i = 0; h_tab[i] != NULL; i++) {
	fprintf(stderr, "[%s]\n", h_tab[i]);
	inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, h_tab[i], NULL);
	if (inst < 0) {
	    fprintf(stderr, "ADD failed: %s\n", pmErrStr(inst));
	    continue;
	}
	fprintf(stderr, "ADD -> %d\n", inst);

	inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, h_tab[i], NULL);
	if (inst < 0) {
	    fprintf(stderr, "HIDE failed: %s\n", pmErrStr(inst));
	    continue;
	}
	fprintf(stderr, "HIDE -> %d\n", inst);

    }
}
Пример #2
0
static void
_g(void)
{
    int		inst;
    int		i;

    indom = pmInDom_build(FORQA, 7);

    for (i = 0; i < 254; i++) {
	pmsprintf(nbuf, sizeof(nbuf), "hashing-instance-%03d", i);
        inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, nbuf, (void *)((__psint_t)(0xdeaf0000+i)));
	if (inst < 0)
	    fprintf(stderr, "PMDA_CACHE_ADD failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	if (i % 2 == 0) {
	    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, nbuf, NULL);
	    if (inst < 0)
		fprintf(stderr, "PMDA_CACHE_HIDE failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	}
	if (i % 7 == 0) {
	    pmsprintf(nbuf, sizeof(nbuf), "hashing-instance-%03d", i);
	    inst = pmdaCacheStore(indom, PMDA_CACHE_CULL, nbuf, NULL);
	    if (inst < 0)
		fprintf(stderr, "PMDA_CACHE_CULL failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	}
    }

    __pmdaCacheDump(stderr, indom, 1);

    _a(0, 0, 0);

    __pmdaCacheDump(stderr, indom, 1);
}
Пример #3
0
static void
_e(int since)
{
    int		i;
    int		j;
    int		sts;
    int		inst;

    indom = pmInDom_build(FORQA, 11);

    sts = pmdaCacheOp(indom, PMDA_CACHE_LOAD);
    if (sts < 0) {
	fprintf(stderr, "PMDA_CACHE_LOAD failed: %s\n", pmErrStr(sts));
	return;
    }

    j = 1;
    for (i = 0; i < 10; i++) {
	pmsprintf(nbuf, sizeof(nbuf), "boring-instance-%03d", i);
        inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, nbuf, (void *)((__psint_t)(0xcaffe000+i)));
	if (inst < 0)
	    fprintf(stderr, "PMDA_CACHE_ADD failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	if (i == j) {
	    j <<= 1;
	    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, nbuf, NULL);
	    if (inst < 0)
		fprintf(stderr, "PMDA_CACHE_HIDE failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	}
    }

    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    fprintf(stderr, "Before purge ...\n");
    __pmdaCacheDump(stderr, indom, 0);

    sleep(1);

    sts = pmdaCachePurge(indom, since);
    if (sts < 0) {
	fprintf(stderr, "pmdaCachePurge failed: %s\n", pmErrStr(sts));
	return;
    }
    fprintf(stderr, "Purged %d entries\nAfter purge ...\n", sts);
    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    __pmdaCacheDump(stderr, indom, 0);
}
Пример #4
0
static void
_j(void)
{
    int		inst;
    int		sts;
    int		i;

    indom = pmInDom_build(FORQA, 10);

    fprintf(stderr, "\nPopulate the instance domain ...\n");
    for (i = 0; i < 20; i++) {
	strncpy(nbuf, xxx, ncount+3);
	pmsprintf(nbuf, sizeof(nbuf), "%03d", ncount);
	ncount++;
        inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, nbuf, (void *)((__psint_t)(0xbeef0000+ncount)));
	if (inst < 0)
	    fprintf(stderr, "PMDA_CACHE_ADD failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
    }
    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    __pmdaCacheDump(stderr, indom, 0);

    /* We've now got a cache with 20 items. Try to resize the cache. */
    sts = pmdaCacheResize(indom, 1234);
    fprintf(stderr, "Resize (good) -> %d", sts);
    if (sts < 0) fprintf(stderr, ": %s", pmErrStr(sts));
    fputc('\n', stderr);

    /* This should fail, since we've got more than 10 items in this cache. */
    sts = pmdaCacheResize(indom, 10);
    fprintf(stderr, "Resize (bad) -> %d", sts);
    if (sts < 0) fprintf(stderr, ": %s", pmErrStr(sts));
    fputc('\n', stderr);

    /* Since we've changed the max, we'll need to save
       again. PMDA_CACHE_SAVE won't resave the cache with just a
       dirty cache header, but PMDA_CACHE_SYNC will. */
    sts = pmdaCacheOp(indom, PMDA_CACHE_SYNC);
    fprintf(stderr, "Sync -> %d\n", sts);
}
Пример #5
0
static void
_c(void)
{
    int		inst;
    int		sts;

    indom = pmInDom_build(FORQA, 13);

    fprintf(stderr, "Load the instance domain ...\n");
    sts = pmdaCacheOp(indom, PMDA_CACHE_LOAD);
    if (sts < 0) {
	fprintf(stderr, "PMDA_CACHE_LOAD failed: %s\n", pmErrStr(sts));
	return;
    }

    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, "fubar-001", NULL);
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_HIDE failed for \"fubar-001\": %s\n", pmErrStr(inst));
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "fubar-002", NULL);
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_ADD failed for \"fubar-002\": %s\n", pmErrStr(inst));
    inst = pmdaCacheStore(indom, PMDA_CACHE_CULL, "fubar-003", NULL);
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_CULL failed for \"fubar-003\": %s\n", pmErrStr(inst));
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "fubar-009", NULL);
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_ADD failed for \"fubar-009\": %s\n", pmErrStr(inst));

    __pmdaCacheDump(stderr, indom, 0);

    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    if (sts < 0) {
	fprintf(stderr, "PMDA_CACHE_SAVE failed: %s\n", pmErrStr(sts));
	return;
    }
}
Пример #6
0
pmInDom
pmiInDom(int domain, int serial)
{
    return pmInDom_build(domain, serial);
}
Пример #7
0
int
main(int argc, char *argv[])
{
    int         sts;
    int         ctx;
    int         c;
    char	*infile;
    int		nfilelist;
    int		filenum;
    char	*archive = NULL;
    int		j;
    char	*buf;
    fields_t	*f;
    char	*s;
    int		gzipped;
    FILE	*fp;
    metric_t	*m;
    handler_t	*h;
    int		unhandled_metric_cnt = 0;

    while ((c = pmGetOptions(argc, argv, &opts)) != EOF) {
        switch (c) {
	case 'F':
	    Fflag = 1;
	    break;
	case 'v':
	    vflag++;
	    break;
        }
    }

    nfilelist = argc - opts.optind - 1;
    if (nfilelist < 1)
    	opts.errors++;
    else
	archive = argv[argc - 1];

    if (opts.errors) {
	pmUsageMessage(&opts);
	exit(1);
    }

    if ((buf = malloc(BUFSIZE)) == NULL) {
    	perror("Error: out of memory:");
	exit(1);
    }

    if (Fflag) {
    	snprintf(buf, BUFSIZE, "%s.meta", archive); unlink(buf);
    	snprintf(buf, BUFSIZE, "%s.index", archive); unlink(buf);
	for (j=0;; j++) {
	    snprintf(buf, BUFSIZE, "%s.%d", archive, j);
	    if (unlink(buf) < 0)
	    	break;
	}
    }

    ctx = pmiStart(archive, 0);
    if ((sts = pmiUseContext(ctx)) < 0) {
	fprintf(stderr, "Error: pmiUseContext failed: %s\n", pmiErrStr(sts));
	exit(1);
    }

    /*
     * Define the metrics name space, see metrics.c (generated by pmdesc)
     */
    for (m = metrics; m->name; m++) {
	pmDesc *d = &m->desc;

	sts = pmiAddMetric(m->name, d->pmid, d->type, d->indom, d->sem, d->units);
	if (sts < 0) {
	    fprintf(stderr, "Error: failed to add metric %s: %s\n", m->name, pmiErrStr(sts));
	    exit(1);
	}
    }

    /*
     * Populate special case instance domains
     */
    pmiAddInstance(pmInDom_build(LINUX_DOMAIN, LOADAVG_INDOM), "1 minute", 1);
    pmiAddInstance(pmInDom_build(LINUX_DOMAIN, LOADAVG_INDOM), "5 minute", 5);
    pmiAddInstance(pmInDom_build(LINUX_DOMAIN, LOADAVG_INDOM), "15 minute", 15);
    indom_cnt[LOADAVG_INDOM] = 3;

    for (filenum=0; filenum < nfilelist; filenum++) {
	infile = argv[opts.optind + filenum];
	gzipped = strstr(infile, ".gz") != NULL;
	if (gzipped) {
	    snprintf(buf, BUFSIZE, "gzip -c -d %s", infile);
	    if ((fp = popen(buf, "r")) == NULL)
		perror(buf);
	}
	else
	if ((fp = fopen(infile, "r")) == NULL)
	    perror(infile);

	if (fp == NULL) {
	    pmUsageMessage(&opts);
	    exit(1);
	}

	/*
	 * parse the header
	 */
	sts = header_handler(fp, infile, buf, BUFSIZE);

	/*
	 * Parse remaining data stream for this input file
	 */
	while(fgets(buf, BUFSIZE, fp)) {
	    if ((s = strrchr(buf, '\n')) != NULL)
		*s = '\0';
	    if (!buf[0])
	    	continue;
	    f = fields_new(buf, strlen(buf)+1);
	    if (f->nfields > 0) {
		if ((h = find_handler(f->fields[0])) == NULL) {
		    unhandled_metric_cnt++;
		    if (vflag > 1)
			printf("Unhandled tag: \"%s\"\n", f->fields[0]);
		}
		else {
		    sts = h->handler(h, f);
		    if (sts < 0 && h->handler == timestamp_handler) {
			fprintf(stderr, "Error: %s\n", pmiErrStr(sts));
			exit(1);
		    }
		}
	    }
	    fields_free(f);
	}

	/* final flush for this file */
	if ((sts = timestamp_flush()) < 0) {
	    fprintf(stderr, "Error: failed to write final timestamp: %s\n", pmiErrStr(sts));
	    exit(1);
	}

	if (gzipped)
	    pclose(fp);
	else
	    fclose(fp);
    }

    sts = pmiEnd();
    if (unhandled_metric_cnt && vflag)
    	fprintf(stderr, "Warning: %d unhandled metric/values\n", unhandled_metric_cnt);

    exit(0);
}
Пример #8
0
/*
 * revised dirty cache semantics
 * style & 1 => SAVE
 * style & 2 => SYNC
 */
static void
_i(int style)
{
    int		sts;
    int		inst;
    int		i;
    static int	first = 1;

    indom = pmInDom_build(FORQA, 15);

    if (first) {
	sts = pmdaCacheOp(indom, PMDA_CACHE_LOAD);
	if (sts < 0) {
	    fprintf(stderr, "PMDA_CACHE_LOAD failed: %s\n", pmErrStr(sts));
	}
	first = 0;
    }

    for (i = 0; i_tab[i] != NULL; i++) {
	fprintf(stderr, "[%s]\n", i_tab[i]);
	inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, i_tab[i], NULL);
	if (inst < 0) {
	    fprintf(stderr, "ADD failed: %s\n", pmErrStr(inst));
	    continue;
	}
	fprintf(stderr, "ADD -> %d\n", inst);
	sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
	if (sts < 0) {
	    fprintf(stderr, "PMDA_CACHE_SAVE failed: %s\n", pmErrStr(sts));
	}
	else
	    fprintf(stderr, "SAVE -> %d\n", sts);

	if (i == 0) {
	    /* last one -> INACTIVE */
	    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, i_tab[i], NULL);
	    if (inst < 0) {
		fprintf(stderr, "HIDE failed: %s\n", pmErrStr(inst));
		continue;
	    }
	    fprintf(stderr, "HIDE -> %d\n", inst);
	}
	else if (i == 1) {
	    /* last one -> INACTIVE -> ACTIVE */
	    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, i_tab[i], NULL);
	    if (inst < 0) {
		fprintf(stderr, "HIDE failed: %s\n", pmErrStr(inst));
		continue;
	    }
	    fprintf(stderr, "HIDE -> %d\n", inst);
	    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, i_tab[i], NULL);
	    if (inst < 0) {
		fprintf(stderr, "ADD failed: %s\n", pmErrStr(inst));
		continue;
	    }
	    fprintf(stderr, "ADD -> %d\n", inst);
	}
	else if (i == 2) {
	    /* last one -> EMPTY */
	    inst = pmdaCacheStore(indom, PMDA_CACHE_CULL, i_tab[i], NULL);
	    if (inst < 0) {
		fprintf(stderr, "CULL failed: %s\n", pmErrStr(inst));
		continue;
	    }
	    fprintf(stderr, "CULL -> %d\n", inst);
	}
	else if (i == 3) {
	    /* add another one */
	    fprintf(stderr, "extra [%s]\n", "felix-the-cat");
	    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "felix-the-cat", NULL);
	    if (inst < 0) {
		fprintf(stderr, "ADD failed: %s\n", pmErrStr(inst));
		continue;
	    }
	    fprintf(stderr, "ADD -> %d\n", inst);
	}
	else if (i == 4) {
	    /* do nothing! */
	    ;
	}
	else {
	    /* empty cache */
	    sts = pmdaCacheOp(indom, PMDA_CACHE_CULL);
	    if (sts < 0) {
		fprintf(stderr, "PMDA_CACHE_CULL failed: %s\n", pmErrStr(sts));
		return;
	    }
	    fprintf(stderr, "CULL ALL -> %d\n", inst);
	}

	if (style & 1) {
	    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
	    if (sts < 0) {
		fprintf(stderr, "PMDA_CACHE_SAVE failed: %s\n", pmErrStr(sts));
	    }
	    else
		fprintf(stderr, "SAVE -> %d\n", sts);
	}

	if (style & 2) {
	    sts = pmdaCacheOp(indom, PMDA_CACHE_SYNC);
	    if (sts < 0) {
		fprintf(stderr, "PMDA_CACHE_SYNC failed: %s\n", pmErrStr(sts));
	    }
	    else
		fprintf(stderr, "SYNC -> %d\n", sts);
	}
    }
}
Пример #9
0
static void
_b(void)
{
    int		i;
    int		j;
    int		inst;
    int		sts;
    char	cmd[2*MAXPATHLEN+30];

    indom = pmInDom_build(FORQA, 8);

    pmsprintf(cmd, sizeof(cmd), "rm -f %s/config/pmda/%s", pmGetConfig("PCP_VAR_DIR"), pmInDomStr(indom));
    sts = system(cmd);
    if (sts != 0)
	fprintf(stderr, "Warning: %s: exit status %d\n", cmd, sts);
    pmsprintf(cmd, sizeof(cmd), "[ -f %s/config/pmda/%s ] || exit 0; cat %s/config/pmda/%s", pmGetConfig("PCP_VAR_DIR"), pmInDomStr(indom), pmGetConfig("PCP_VAR_DIR"), pmInDomStr(indom));

    fprintf(stderr, "\nPopulate the instance domain ...\n");
    j = 1;
    for (i = 0; i < 20; i++) {
	strncpy(nbuf, xxx, ncount+3);
	pmsprintf(nbuf, sizeof(nbuf), "%03d", ncount);
	ncount++;
        inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, nbuf, (void *)((__psint_t)(0xbeef0000+ncount)));
	if (inst < 0)
	    fprintf(stderr, "PMDA_CACHE_ADD failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	else if (i > 14) {
	    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
	    fprintf(stderr, "Save -> %d\n", sts);
	}
	if (i == j) {
	    j <<= 1;
	    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, nbuf, NULL);
	    if (inst < 0)
		fprintf(stderr, "PMDA_CACHE_HIDE failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
	}
	if (i == 6 || i == 13) {
	    fprintf(stderr, "Save ...\n");
	    fprintf(stderr, "Before:\n");
	    sts = system(cmd);
	    if (sts != 0)
		fprintf(stderr, "Warning: _b:1: %s: exit status %d\n", cmd, sts);
	    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
	    fprintf(stderr, "return -> %d", sts);
	    if (sts < 0) fprintf(stderr, ": %s", pmErrStr(sts));
	    fputc('\n', stderr);
	    fprintf(stderr, "After:\n");
	    sts = system(cmd);
	    if (sts != 0)
		fprintf(stderr, "Warning: _b:2: %s: exit status %d\n", cmd, sts);
	}
	if (i == 14) {
	    fprintf(stderr, "Start save after changes ...\n");
	}
	if (i > 14) {
	    sts = system(cmd);
	    if (sts != 0)
		fprintf(stderr, "Warning: _b:3: %s: exit status %d\n", cmd, sts);
	}
    }
    __pmdaCacheDump(stderr, indom, 0);
    strncpy(nbuf, xxx, 11+3);
    pmsprintf(nbuf, sizeof(nbuf), "%03d", 11);
    fprintf(stderr, "\nHide %s ...\n", nbuf);
    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, nbuf, NULL);
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_HIDE failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    sts = system(cmd);
    if (sts != 0)
	fprintf(stderr, "Warning: _b:4: %s: exit status %d\n", cmd, sts);
    fprintf(stderr, "Add %s ...\n", nbuf);
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, nbuf, (void *)((__psint_t)0xdeadbeef));
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_ADD failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    sts = system(cmd);
    if (sts != 0)
	fprintf(stderr, "Warning: _b:5: %s: exit status %d\n", cmd, sts);
    fprintf(stderr, "Cull %s ...\n", nbuf);
    inst = pmdaCacheStore(indom, PMDA_CACHE_CULL, nbuf, NULL);
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_CULL failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    sts = system(cmd);
    if (sts != 0)
	fprintf(stderr, "Warning: _b:6: %s: exit status %d\n", cmd, sts);
    fprintf(stderr, "Add %s ...\n", nbuf);
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, nbuf, (void *)((__psint_t)0xdeadbeef));
    if (inst < 0)
	fprintf(stderr, "PMDA_CACHE_ADD failed for \"%s\": %s\n", nbuf, pmErrStr(inst));
    sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
    fprintf(stderr, "Save -> %d\n", sts);
    sts = system(cmd);
    if (sts != 0)
	fprintf(stderr, "Warning: _b:7: %s: exit status %d\n", cmd, sts);

}
Пример #10
0
static void
_a(int load, int verbose, int extra)
{
    int		inst;
    int		sts;

    indom = pmInDom_build(FORQA, 7);

    if (load) {
	fprintf(stderr, "Load the instance domain ...\n");
	sts = pmdaCacheOp(indom, PMDA_CACHE_LOAD);
	if (sts < 0) {
	    fprintf(stderr, "PMDA_CACHE_LOAD failed: %s\n", pmErrStr(sts));
	    return;
	}
    }

    fprintf(stderr, "Add foo ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "foo", NULL);
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDumpAll(stderr, 0);

    fprintf(stderr, "\nAdd bar ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "bar", (void *)((__psint_t)0xdeadbeef));
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDumpAll(stderr, 0);

    fprintf(stderr, "\nAdd java coffee beans ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "java coffee beans", (void *)((__psint_t)0xcafecafe));
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDumpAll(stderr, 0);

    fprintf(stderr, "\nAdd another one ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "another one", NULL);
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDumpAll(stderr, 0);

    fprintf(stderr, "\nHide another one ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_HIDE, "another one", NULL);
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    fprintf(stderr, "\nCull foo ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_CULL, "foo", NULL);
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    fprintf(stderr, "\nCull foo again, should fail ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_CULL, "foo", NULL);
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    fprintf(stderr, "\nCount instances ...\n");
    sts = pmdaCacheOp(indom, PMDA_CACHE_SIZE);
    fprintf(stderr, "entries: %d\n", sts);
    sts = pmdaCacheOp(indom, PMDA_CACHE_SIZE_ACTIVE);
    fprintf(stderr, "active entries: %d\n", sts);
    sts = pmdaCacheOp(indom, PMDA_CACHE_SIZE_INACTIVE);
    fprintf(stderr, "inactive entries: %d\n", sts);

    fprintf(stderr, "\nProbe bar ...\n");
    sts = pmdaCacheLookupName(indom, "bar", &inst, NULL);
    fprintf(stderr, "return ->");
    if (sts >= 0) fprintf(stderr, " %d", inst);
    if (sts == PMDA_CACHE_INACTIVE) fprintf(stderr, " [inactive]");
    if (sts < 0) fprintf(stderr, " %d: %s", sts, pmErrStr(sts));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    fprintf(stderr, "\nProbe another one (hidden) ...\n");
    sts = pmdaCacheLookupName(indom, "another one", &inst, NULL);
    fprintf(stderr, "return ->");
    if (sts >= 0) fprintf(stderr, " %d", inst);
    if (sts == PMDA_CACHE_INACTIVE) fprintf(stderr, " [inactive]");
    if (sts < 0) fprintf(stderr, " %d: %s", sts, pmErrStr(sts));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    if (load) {
	sts = pmdaCacheOp(indom, PMDA_CACHE_SAVE);
	if (sts < 0) {
	    fprintf(stderr, "PMDA_CACHE_SAVE failed: %s\n", pmErrStr(sts));
	}
	return;
    }

    if (extra == 0)
	return;

    indom = pmInDom_build(FORQA, 8);
    fprintf(stderr, "\nAdd foo in another indom ...\n");
    inst = pmdaCacheStore(indom, PMDA_CACHE_ADD, "foo", NULL);
    fprintf(stderr, "return -> %d", inst);
    if (inst < 0) fprintf(stderr, ": %s", pmErrStr(inst));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDumpAll(stderr, 0);

    fprintf(stderr, "\nProbe bar (not in this indom) ...\n");
    sts = pmdaCacheLookupName(indom, "bar", &inst, NULL);
    fprintf(stderr, "return ->");
    if (sts >= 0) fprintf(stderr, " %d", inst);
    if (sts == PMDA_CACHE_INACTIVE) fprintf(stderr, " [inactive]");
    if (sts < 0) fprintf(stderr, " %d: %s", sts, pmErrStr(sts));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);


    indom = pmInDom_build(FORQA, 7);

    fprintf(stderr, "\nMark all active ...\n");
    sts = pmdaCacheOp(indom, PMDA_CACHE_ACTIVE);
    fprintf(stderr, "return -> %d", sts);
    if (sts < 0) fprintf(stderr, ": %s", pmErrStr(sts));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    fprintf(stderr, "\nMark all inactive ...\n");
    sts = pmdaCacheOp(indom, PMDA_CACHE_INACTIVE);
    fprintf(stderr, "return -> %d", sts);
    if (sts < 0) fprintf(stderr, ": %s", pmErrStr(sts));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

    fprintf(stderr, "\nCull all ...\n");
    sts = pmdaCacheOp(indom, PMDA_CACHE_CULL);
    fprintf(stderr, "return -> %d", sts);
    if (sts < 0) fprintf(stderr, ": %s", pmErrStr(sts));
    fputc('\n', stderr);
    if (verbose) __pmdaCacheDump(stderr, indom, 0);

}