MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / initSegments

Method initSegments

src/jrd/replication/ChangeLog.cpp:895–935  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

893}
894
895void ChangeLog::initSegments()
896{
897 clearSegments();
898
899 const auto state = m_sharedMemory->getHeader();
900
901 AutoPtr<PathUtils::DirIterator> iter;
902
903 for (iter = PathUtils::newDirIterator(getPool(), m_config->journalDirectory);
904 *iter; ++(*iter))
905 {
906 const auto filename = **iter;
907
908 const auto fd = os_utils::openCreateSharedFile(filename.c_str(), O_BINARY);
909
910 AutoPtr<Segment> segment(FB_NEW_POOL(getPool()) Segment(getPool(), filename, fd));
911
912 if (!validateSegment(segment))
913 continue;
914
915 if (segment->getSequence() > state->sequence)
916 segment->setState(SEGMENT_STATE_FREE);
917
918 if (segment->getState() == SEGMENT_STATE_FREE)
919 {
920 segment->closeFile();
921
922 if (segment->getSequence() + m_config->segmentCount <= state->sequence)
923 {
924 const PathName& fname = segment->getPathName();
925 unlink(fname.c_str());
926 continue;
927 }
928 }
929
930 segment->addRef();
931 m_segments.add(segment.release());
932 }
933
934 m_generation = state->generation;
935}
936
937void ChangeLog::clearSegments()
938{

Callers

nothing calls this directly

Calls 12

closeFileMethod · 0.80
SegmentClass · 0.70
openCreateSharedFileFunction · 0.50
unlinkFunction · 0.50
getHeaderMethod · 0.45
c_strMethod · 0.45
getSequenceMethod · 0.45
setStateMethod · 0.45
getStateMethod · 0.45
addRefMethod · 0.45
addMethod · 0.45
releaseMethod · 0.45

Tested by

no test coverage detected