static void pool_create(const char *path, const char *layout, size_t poolsize, unsigned mode) { PMEMobjpool *pop = pmemobj_create(path, layout, poolsize, mode); if (pop == NULL) UT_OUT("!%s: pmemobj_create", path); else { struct stat stbuf; STAT(path, &stbuf); UT_OUT("%s: file size %zu mode 0%o", path, stbuf.st_size, stbuf.st_mode & 0777); pmemobj_close(pop); int result = pmemobj_check(path, layout); if (result < 0) UT_OUT("!%s: pmemobj_check", path); else if (result == 0) UT_OUT("%s: pmemobj_check: not consistent", path); } }
int main(int argc, char *argv[]) { START(argc, argv, "obj_check"); if (argc < 2) { UT_FATAL("usage: obj_check file"); } const char *path = argv[1]; int ret = pmemobj_check(path, NULL); switch (ret) { case 1: UT_OUT("consistent"); break; case 0: UT_OUT("not consistent: %s", pmemobj_errormsg()); break; default: UT_OUT("error: %s", pmemobj_errormsg()); break; } DONE(NULL); }
static void test_allocs(PMEMobjpool *pop, const char *path) { PMEMoid oid[TEST_ALLOC_SIZE]; if (pmemobj_alloc(pop, &oid[0], 0, 0, NULL, NULL) == 0) UT_FATAL("pmemobj_alloc(0) succeeded"); for (int i = 1; i < TEST_ALLOC_SIZE; ++i) { struct cargs args = { i }; if (pmemobj_alloc(pop, &oid[i], i, 0, test_constructor, &args) != 0) UT_FATAL("!pmemobj_alloc"); UT_ASSERT(!OID_IS_NULL(oid[i])); } pmemobj_close(pop); UT_ASSERT(pmemobj_check(path, LAYOUT_NAME) == 1); UT_ASSERT((pop = pmemobj_open(path, LAYOUT_NAME)) != NULL); for (int i = 1; i < TEST_ALLOC_SIZE; ++i) { pmemobj_free(&oid[i]); UT_ASSERT(OID_IS_NULL(oid[i])); } }
int main(int argc, char *argv[]) { START(argc, argv, "obj_out_of_memory"); if (argc < 3) FATAL("usage: %s size filename ...", argv[0]); size_t size = atoll(argv[1]); for (int i = 2; i < argc; i++) { const char *path = argv[i]; PMEMobjpool *pop = pmemobj_create(path, LAYOUT_NAME, 0, S_IWUSR | S_IRUSR); if (pop == NULL) FATAL("!pmemobj_create: %s", path); test_alloc(pop, size); pmemobj_close(pop); ASSERTeq(pmemobj_check(path, LAYOUT_NAME), 1); ASSERTne(pop = pmemobj_open(path, LAYOUT_NAME), NULL); test_free(pop); pmemobj_close(pop); } DONE(NULL); }
int main(int argc, char *argv[]) { START(argc, argv, "obj_check"); if (argc < 2 || argc > 5) UT_FATAL("usage: obj_check <file> [-l <layout>] [-o]"); const char *path = argv[1]; const char *layout = NULL; PMEMobjpool *pop = NULL; int open = 0; for (int i = 2; i < argc; ++i) { if (strcmp(argv[i], "-o") == 0) open = 1; else if (strcmp(argv[i], "-l") == 0) { layout = argv[i + 1]; i++; } else UT_FATAL("Unrecognized argument: %s", argv[i]); } if (open) { pop = pmemobj_open(path, layout); if (pop == NULL) UT_OUT("!%s: pmemobj_open", path); else UT_OUT("%s: pmemobj_open: Success", path); } int ret = pmemobj_check(path, layout); switch (ret) { case 1: UT_OUT("consistent"); break; case 0: UT_OUT("not consistent: %s", pmemobj_errormsg()); break; default: UT_OUT("error: %s", pmemobj_errormsg()); break; } if (pop != NULL) pmemobj_close(pop); DONE(NULL); }
int main(int argc, char *argv[]) { START(argc, argv, "obj_out_of_memory"); if (argc < 3) FATAL("usage: %s size filename ...", argv[0]); size_t size = atoll(argv[1]); for (int i = 2; i < argc; i++) { const char *path = argv[i]; PMEMobjpool *pop = pmemobj_create(path, LAYOUT_NAME, 0, S_IWUSR | S_IRUSR); if (pop == NULL) FATAL("!pmemobj_create: %s", path); test_alloc(pop, size); pmemobj_close(pop); ASSERTeq(pmemobj_check(path, LAYOUT_NAME), 1); /* * To prevent subsequent opens from receiving exactly the same * volatile memory addresses a dummy malloc has to be made. * This can expose issues in which traces of previous volatile * state are leftover in the persistent pool. */ void *heap_touch = MALLOC(1); ASSERTne(pop = pmemobj_open(path, LAYOUT_NAME), NULL); test_free(pop); pmemobj_close(pop); FREE(heap_touch); } DONE(NULL); }
/** * Checks if a given pool is consistent. * * @param path System path to the file containing the memory * pool or a pool set. * @param layout Unique identifier of the pool as specified at * pool creation time. * * @return -1 on error, 1 if file is consistent, 0 otherwise. */ static int check(const std::string &path, const std::string &layout) noexcept { return pmemobj_check(path.c_str(), layout.c_str()); }