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

Method createSegment

src/jrd/replication/ChangeLog.cpp:943–971  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

941}
942
943ChangeLog::Segment* ChangeLog::createSegment()
944{
945 const auto state = m_sharedMemory->getHeader();
946 const auto sequence = state->sequence + 1;
947
948 PathName filename;
949 filename.printf(FILENAME_PATTERN, m_config->filePrefix.c_str(), sequence);
950 filename = m_config->journalDirectory + filename;
951
952 const auto fd = os_utils::openCreateSharedFile(filename.c_str(), O_EXCL | O_BINARY);
953
954 SegmentHeader dummyHeader = {0};
955 if (::write(fd, &dummyHeader, sizeof(SegmentHeader)) != sizeof(SegmentHeader))
956 {
957 ::close(fd);
958 raiseError("Journal file %s write failed (error %d)", filename.c_str(), ERRNO);
959 }
960
961 const auto segment = FB_NEW_POOL(getPool()) Segment(getPool(), filename, fd);
962
963 segment->init(sequence, m_guid);
964 segment->addRef();
965
966 m_segments.add(segment);
967 state->generation++;
968 state->sequence++;
969
970 return segment;
971}
972
973ChangeLog::Segment* ChangeLog::reuseSegment(ChangeLog::Segment* segment)
974{

Callers

nothing calls this directly

Calls 9

raiseErrorFunction · 0.70
SegmentClass · 0.70
openCreateSharedFileFunction · 0.50
getHeaderMethod · 0.45
printfMethod · 0.45
c_strMethod · 0.45
initMethod · 0.45
addRefMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected