powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как запретить формировать файл firebird.log
8 сообщений из 83, страница 4 из 4
Как запретить формировать файл firebird.log
    #38484400
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrNickDeeВидно что под виндой два процесса вполне себе могут пытаться одновременно писать в один firebird.log, без блокировки на уровне OS.
а ожидание на мьютексе - это не блокировка на уровне ОС? :-)
Вот такой мьютекс
Код: plaintext
1.
HANDLE CleanupTraceHandles::trace_mutex_handle = CreateMutex(NULL, FALSE, "firebird_trace_mutex");

? :)
Я тут вижу, что во первых он распространяется только на текущую windows-сессию, т.е. параллельным сессиям он не виден (имхо тут проблема может быть с терминальными клиентами). Если что, я это проверил :)
А во вторых - это получается что все фаербёрд-инстансы (хоть и в рамках одной windows-сессии) покуривают при трэйсе на WaitForSingleObject(CleanupTraceHandles::trace_mutex_handle, INFINITE), если верить коду:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
void API_ROUTINE gds__trace_raw(const char* text, unsigned int length)
{
/**************************************
 *
 *	g d s _ t r a c e _ r a w
 *
 **************************************
 *
 * Functional description
 *	Write trace event to a log file
 *
 **************************************/
	if (!length)
		length = strlen(text);
#ifdef WIN_NT
	// Note: thread-safe code

	// Nickolay Samofatov, 12 Sept 2003. Windows opens files extremely slowly.
	// Slowly enough to make such trace useless. Thus we cache file handle !
	WaitForSingleObject(CleanupTraceHandles::trace_mutex_handle, INFINITE);
	while (true)
	{
		if (CleanupTraceHandles::trace_file_handle == INVALID_HANDLE_VALUE)
		{
			Firebird::PathName name = fb_utils::getPrefix(fb_utils::FB_DIR_LOG, LOGFILE);
			// We do not care to close this file.
			// It will be closed automatically when our process terminates.
			CleanupTraceHandles::trace_file_handle = CreateFile(name.c_str(), GENERIC_WRITE,
				FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
				NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
			if (CleanupTraceHandles::trace_file_handle == INVALID_HANDLE_VALUE)
				break;
		}
		DWORD bytesWritten;
		SetFilePointer(CleanupTraceHandles::trace_file_handle, 0, NULL, FILE_END);
		WriteFile(CleanupTraceHandles::trace_file_handle, text, length, &bytesWritten, NULL);
		if (bytesWritten != length)
		{
			// Handle the case when file was deleted by another process on Win9x
			// On WinNT we are not going to notice that fact :(
			CloseHandle(CleanupTraceHandles::trace_file_handle);
			CleanupTraceHandles::trace_file_handle = INVALID_HANDLE_VALUE;
			continue;
		}
		break;
	}
	ReleaseMutex(CleanupTraceHandles::trace_mutex_handle);
#else
	Firebird::PathName name = fb_utils::getPrefix(fb_utils::FB_DIR_LOG, LOGFILE);
	int file = open(name.c_str(), O_CREAT | O_APPEND | O_WRONLY, 0660);
	if (file == -1)
		return;

	write(file, text, length);
	close(file);
#endif
}



То что лока нет в других сессиях, это я проверил с помощью этого:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
program Project15;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  WinApi.Windows;

var
  Mutex: THandle;
begin
  try
    Mutex := CreateMutex(nil, FALSE, 'firebird_trace_mutex');
    WriteLn('WaitFor...');
    WaitForSingleObject(Mutex, INFINITE);
    try
      WriteLn('Entered');
      ReadLn;
    finally
      ReleaseMutex(Mutex);
    end;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.


Запустил этот код в разных win-сессиях, одновременно. Лока нет.

Имхо имя мьютекса лучше бы сделать по имени файла (например 'firebird_trace_mutex_' + MD5Str(UpperCase(FileName))), чтобы не лочить других трэйсеров которые пишут в другие файлы, и сделать мьютекс видимым другим сессиям которые будут писать в этот же файл :) Хотя это конечно не поможет если файл на шаре и с ним работают с других машин, тут имхо только лок поможет.
Вот ещё оказывается как окружение может влиять :) Два разных фаербёрда лезут через одно горлышко при записи трэйса в разные файлы. Причём только под виндой :)
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38484453
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот мьютекс, несмотря на своё название, не имеет к трейсу (TraceAPI) ни малейшего отношения. Так что ни покуривания, ни "горлышка" никакого нет.

Насчёт разных сессий - для сервера пофигу, ибо он должен работать как сервис, а у сервисов отдельная 0-я сессия. Если кто-то на терминальном сервере запускает сервер как приложение, да ещё и для каждой сессии, то реальные проблемы у него начнутся гораздо раньше, чем он начнёт писать в firebird.log.

Если говорить о терминальных клиентах, то - да, если они все пользуют один и тот же fbclient.dll, то будут писать в один и тот же firebird.log без синхронизации. Если будет конкуренция между клиентами за этот файл, то вполне вероятна каша в нём. Как увидишь это в реальной жизни - приходи, показывай - поржём вместе.
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38484530
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЭтот мьютекс, несмотря на своё название, не имеет к трейсу (TraceAPI) ни малейшего отношения.
Понятно. Повёлся почему-то на вот это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void API_ROUTINE gds__trace_raw(const char* text, unsigned int length)
{
/**************************************
 *
 *	g d s _ t r a c e _ r a w
 *
 **************************************
 *
 * Functional description
 *	Write trace event to a log file
 *
 **************************************/
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38496470
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос решился. Удалось уговорить оставить доступ к этому логу пользователям.
Всем спасибо большое за помощь!

Пользуясь моментом хотел спросить:
У меня на сервере работают программисты под дельфой и у каждого своя такая система для экологов для разработки итд итп, так вот при запуске системы, от каждого программиста в службах запускается отдельная служба, которая соответственно связана с FB, иногда FB падает и никто не может работать, пока не перезагрузишь сервер, перезагрузка самой службы FB не помогает, она только останавливает все службы от программистов, а запустить их обратно не может, пишет, что "ошибка 1053 служба не ответила на запрос своевременно" хотя сам FB перезапускается.
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38496675
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624,

с этим к тем программистам.
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38497945
mishanya3624
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что их косяк это однозначно, только вот никто не признается кто его роняет и при каких обстоятельствах:)
Еще раз всем спасибо!
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38497967
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624То, что их косяк это однозначно, только вот никто не признается кто его роняет и при каких обстоятельствах:)
У программистов по феншую должен быть свой тестовый сервер, который не страшно не то что ронять, но и намеренно мучать свооими шаловливыми ручками.
...
Рейтинг: 0 / 0
Как запретить формировать файл firebird.log
    #38498154
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mishanya3624То, что их косяк это однозначноЭто косяк того, кто такую систему сделал.
Когда отлаживаешься падает много чего и много где, особливо, когда программа в виде "прототип", "альфа версия" и т.п.

Странно то, что ей вообще удалось взлететь. :)
...
Рейтинг: 0 / 0
8 сообщений из 83, страница 4 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как запретить формировать файл firebird.log
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]