Книга: UNIX: взаимодействие процессов
Идентификатор транзакций
Идентификатор транзакций
Другая часть стратегии тайм-аутов и повторных передач заключается в использовании идентификаторов транзакций (transaction ID или XID) для распознавания запросов клиента и ответов сервера. Когда клиент вызывает функцию RPC, библиотека присваивает этому вызову 32-разрядный целочисленный номер и это значение отсылается в запросе RPC. Сервер должен добавить к своему ответу этот номер. При повторной отсылке запроса идентификатор не меняется. Служит он двум целям:
1. Клиент проверяет, что XID ответа совпадает с XID запроса. Если совпадения нет, ответ игнорируется. Если используется протокол TCP, у клиента практически нет шансов получить ответ с неправильным идентификатором, но при использовании протокола UDP поверх плохой сети вероятность получения неправильного XID достаточно высока.
2. Серверу разрешается помещать отсылаемые ответы в кэш, и для проверки идентичности ответов используется, в частности, именно XID. Об этом мы вскоре расскажем.
Пакет TI-RPC использует определенный алгоритм вычисления XID для нового запроса. Алгоритм этот описан ниже. Значок ^ означает побитовую операцию XOR (исключающее ИЛИ):
struct timeval now;
gettimeofday(&now, NULL);
xid = getpid() ^ now.tv_sec ^ now.tv_usec;
- Идентификатор и возраст транзакции
- Реализация многоверсионности. Страницы учета транзакций
- Доступ к идентификатору транзакции
- "Старение" и статистика транзакций
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- 1.2.1. Ключевые слова и идентификаторы
- Реальный (RID) и эффективный (EUID) идентификаторы пользователя
- Ограничение времени ожидания для транзакций (Lock timeout)
- Завершение транзакций
- Функции транзакций именованных каналов
- Использование возможностей множества транзакций
- 10.2.3. Идентификатор uid файловой системы