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

Method bgArchiver

src/jrd/replication/ChangeLog.cpp:819–893  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

817}
818
819void ChangeLog::bgArchiver()
820{
821 try
822 {
823 // Signal about our startup
824 m_startupSemaphore.release();
825
826 while (!m_shutdown)
827 {
828 LockGuard guard(this);
829
830 const auto state = m_sharedMemory->getHeader();
831
832 for (const auto segment : m_segments)
833 {
834 if (segment->getState() == SEGMENT_STATE_USED)
835 {
836 if (segment->hasData() && m_config->archiveTimeout)
837 {
838 const auto delta_timestamp = time(NULL) - state->timestamp;
839
840 if (delta_timestamp > m_config->archiveTimeout)
841 {
842 segment->setState(SEGMENT_STATE_FULL);
843 state->flushMark++;
844 }
845 }
846
847 break;
848 }
849 }
850
851 Segment* lastSegment = nullptr;
852
853 while (!m_shutdown)
854 {
855 bool restart = false;
856
857 for (const auto segment : m_segments)
858 {
859 if (segment != lastSegment &&
860 segment->getState() == SEGMENT_STATE_FULL)
861 {
862 lastSegment = segment;
863 archiveSegment(segment);
864 restart = true;
865 break;
866 }
867 }
868
869 if (!restart)
870 break;
871 }
872
873 guard.release();
874
875 m_workingSemaphore.tryEnter(1);
876 }

Callers 1

archiver_threadFunction · 0.80

Calls 7

iscLogExceptionFunction · 0.85
releaseMethod · 0.45
getHeaderMethod · 0.45
getStateMethod · 0.45
hasDataMethod · 0.45
setStateMethod · 0.45
tryEnterMethod · 0.45

Tested by

no test coverage detected