block_t and cache_t fully operational again.

This commit is contained in:
Joe Thornber 2013-01-07 16:39:02 +00:00
parent b63a921d44
commit ab7124e441
5 changed files with 31 additions and 38 deletions

3
.gitignore vendored
View File

@ -7,4 +7,5 @@ thin_dump
thin_restore thin_restore
thin_repair thin_repair
*.metadata *.metadata
bad-metadata bad-metadata
Makefile

View File

@ -79,6 +79,7 @@ test-programs: $(TEST_PROGRAMS)
.SUFFIXES: .d .SUFFIXES: .d
# FIXME: not working
%.d: %.cc %.d: %.cc
$(CXX) -MM -MT $(subst .cc,.o,$<) $(INCLUDES) $(CXXFLAGS) $< > $@.$$$$;\ $(CXX) -MM -MT $(subst .cc,.o,$<) $(INCLUDES) $(CXXFLAGS) $< > $@.$$$$;\
sed 's,\([^ :]*\)\.o[ :]*,\1.o $@ : Makefile ,g' < $@.$$$$ > $@; \ sed 's,\([^ :]*\)\.o[ :]*,\1.o $@ : Makefile ,g' < $@.$$$$ > $@; \
@ -142,7 +143,7 @@ thin_check: $(THIN_CHECK_OBJECTS) thin-provisioning/thin_check.o
# $(CXX) $(CXXFLAGS) -o $@ $+ $(LIBS) # $(CXX) $(CXXFLAGS) -o $@ $+ $(LIBS)
clean: clean:
$(RM) *.o unit-tests/*.o *.d unit-tests/*.d $(TEST_PROGRAMS) $(PROGRAMS) $(RM) *.o unit-tests/*.o *.d unit-tests/*.d $(TEST_PROGRAMS) $(PROGRAMS) $(OBJECTS)
distclean: clean distclean: clean
$(RM) config.cache config.log config.status configure.h version.h Makefile unit-tests/Makefile $(RM) config.cache config.log config.status configure.h version.h Makefile unit-tests/Makefile
.PHONY: clean distclean .PHONY: clean distclean

View File

@ -17,16 +17,16 @@
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
TEST_SOURCE=\ TEST_SOURCE=\
unit-tests/cache_t.cc unit-tests/cache_t.cc \
unit-tests/block_t.cc
# FIXME Make these tests work. # FIXME: reinstate
# unit-tests/block_t.cc \ # unit-tests/btree_t.cc \
unit-tests/btree_t.cc \ # unit-tests/endian_t.cc \
unit-tests/endian_t.cc \ # unit-tests/run_list_t.cc \
unit-tests/run_list_t.cc \ # unit-tests/space_map_t.cc \
unit-tests/space_map_t.cc \ # unit-tests/space_map_disk_t.cc \
unit-tests/space_map_disk_t.cc \ # unit-tests/transaction_manager_t.cc
unit-tests/transaction_manager_t.cc
TEST_PROGRAMS=$(subst .cc,,$(TEST_SOURCE)) TEST_PROGRAMS=$(subst .cc,,$(TEST_SOURCE))
@ -35,31 +35,31 @@ unit-test: $(TEST_PROGRAMS)
.PHONY: unit-test .PHONY: unit-test
unit-tests/block_t: unit-tests/block_t.o unit-tests/block_t: unit-tests/block_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/btree_t: unit-tests/btree_t.o $(OBJECTS) unit-tests/btree_t: unit-tests/btree_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/cache_t: unit-tests/cache_t.o $(OBJECTS) unit-tests/cache_t: unit-tests/cache_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/run_list_t: unit-tests/run_list_t.o $(OBJECTS) unit-tests/run_list_t: unit-tests/run_list_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/space_map_t: unit-tests/space_map_t.o $(OBJECTS) unit-tests/space_map_t: unit-tests/space_map_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/space_map_disk_t: unit-tests/space_map_disk_t.o $(OBJECTS) unit-tests/space_map_disk_t: unit-tests/space_map_disk_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/transaction_manager_t: unit-tests/transaction_manager_t.o $(OBJECTS) unit-tests/transaction_manager_t: unit-tests/transaction_manager_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/metadata_t: unit-tests/metadata_t.o $(OBJECTS) unit-tests/metadata_t: unit-tests/metadata_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
unit-tests/endian_t: unit-tests/endian_t.o $(OBJECTS) unit-tests/endian_t: unit-tests/endian_t.o $(OBJECTS)
g++ $(CXXFLAGS) -o $@ $+ $(LIBS) $(LIBEXPAT) g++ $(CXXFLAGS) $(INCLUDES) -o $@ $+ $(LIBS) $(LIBEXPAT)
all: $(TEST_PROGRAMS) all: $(TEST_PROGRAMS)

View File

@ -16,7 +16,7 @@
// with thin-provisioning-tools. If not, see // with thin-provisioning-tools. If not, see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
#include "block.h" #include "persistent-data/block.h"
#define BOOST_TEST_MODULE BlockManagerTests #define BOOST_TEST_MODULE BlockManagerTests
#include <boost/test/included/unit_test.hpp> #include <boost/test/included/unit_test.hpp>
@ -34,20 +34,20 @@ namespace {
template <uint32_t BlockSize> template <uint32_t BlockSize>
void check_all_bytes(typename block_manager<BlockSize>::read_ref const &rr, int v) { void check_all_bytes(typename block_manager<BlockSize>::read_ref const &rr, int v) {
typename block_manager<BlockSize>::const_buffer &data = rr.data(); persistent_data::buffer<BlockSize> const &data = rr.data();
for (unsigned b = 0; b < BlockSize; b++) for (unsigned b = 0; b < BlockSize; b++)
BOOST_CHECK_EQUAL(data[b], v); BOOST_CHECK_EQUAL(data[b], v);
} }
template <uint32_t BlockSize> template <uint32_t BlockSize>
class zero_validator : public block_manager<BlockSize>::validator { struct zero_validator : public block_manager<BlockSize>::validator {
void check(block_manager<4096>::const_buffer &data, block_address location) const { virtual void check(buffer<BlockSize> const &data, block_address location) const {
for (unsigned b = 0; b < BlockSize; b++) for (unsigned b = 0; b < BlockSize; b++)
if (data[b] != 0) if (data[b] != 0)
throw runtime_error("validator check zero"); throw runtime_error("validator check zero");
} }
void prepare(block_manager<4096>::buffer &data, block_address location) const { virtual void prepare(buffer<BlockSize> &data, block_address location) const {
cerr << "zeroing" << endl; cerr << "zeroing" << endl;
for (unsigned b = 0; b < BlockSize; b++) for (unsigned b = 0; b < BlockSize; b++)
data[b] = 0; data[b] = 0;
@ -92,7 +92,7 @@ BOOST_AUTO_TEST_CASE(writes_persist)
bm4096::ptr bm = create_bm(nr); bm4096::ptr bm = create_bm(nr);
for (unsigned i = 0; i < nr; i++) { for (unsigned i = 0; i < nr; i++) {
bm4096::write_ref wr = bm->write_lock(i); bm4096::write_ref wr = bm->write_lock(i);
::memset(wr.data(), i, 4096); ::memset(wr.data().raw(), i, 4096);
} }
for (unsigned i = 0; i < nr; i++) { for (unsigned i = 0; i < nr; i++) {
@ -137,7 +137,7 @@ BOOST_AUTO_TEST_CASE(write_validator_works)
{ {
bm4096::write_ref wr = bm->write_lock(0, v); bm4096::write_ref wr = bm->write_lock(0, v);
::memset(wr.data(), 23, sizeof(wr.data())); ::memset(wr.data().raw(), 23, sizeof(wr.data().raw()));
} }
bm->flush(); // force the prepare method to be called bm->flush(); // force the prepare method to be called
@ -183,15 +183,6 @@ BOOST_AUTO_TEST_CASE(references_can_be_copied)
bm4096::write_ref wr2(wr1); bm4096::write_ref wr2(wr1);
} }
#if 0
BOOST_AUTO_TEST_CASE(flush_throws_if_held_locks)
{
bm4096::ptr bm = create_bm();
bm4096::write_ref wr = bm->write_lock(0);
BOOST_CHECK_THROW(bm->flush(), runtime_error);
}
#endif
BOOST_AUTO_TEST_CASE(no_concurrent_write_locks) BOOST_AUTO_TEST_CASE(no_concurrent_write_locks)
{ {
bm4096::ptr bm = create_bm(); bm4096::ptr bm = create_bm();

View File

@ -16,7 +16,7 @@
// with thin-provisioning-tools. If not, see // with thin-provisioning-tools. If not, see
// <http://www.gnu.org/licenses/>. // <http://www.gnu.org/licenses/>.
#include "cache.h" #include "persistent-data/cache.h"
#define BOOST_TEST_MODULE CacheTests #define BOOST_TEST_MODULE CacheTests
#include <boost/test/included/unit_test.hpp> #include <boost/test/included/unit_test.hpp>