Re: Let's make PostgreSQL multi-threaded

Поиск
Список
Период
Сортировка
От Yura Sokolov
Тема Re: Let's make PostgreSQL multi-threaded
Дата
Msg-id 8c105e05-2e05-68fa-cc6e-1c9b92e60d64@postgrespro.ru
обсуждение исходный текст
Ответ на Re: Let's make PostgreSQL multi-threaded  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
07.06.2023 15:53, Robert Haas wrote:
> Right now, if you need a bit
> of additional session-local state, you just declare a variable and
> you're all set. That's not a perfect system and does cause some
> problems, but we can't go from there to a system where it's impossible
> to add session-local state without hacking core.

> or else it needs to
> be design in some kind of extensible way that doesn't require it to
> know the full details of every sort of object that's being used as
> session-local state anywhere in the system.
And it is quite possible. Although with indirection involved.

For example, we want to add session variable "my_hello_var".
We first need to declare "offset variable".
Then register it in a session.
And then use function and/or macros to get actual address:

     /* session.h */
     extern size_t RegisterSessionVar(size_t size);
     extern void* CurSessionVar(size_t offset);


     /* session.c */
     typedef struct Session {
         char *vars;
     } Session;

     static _Thread_local Session* curSession;
     static size_t sessionVarsSize = 0;
     size_t
     RegisterSessionVar(size_t size)
     {
         size_t off = sessionVarsSize;
         sessionVarsSize += size;
         return off;
     }
     
     void*
     CurSession(size_t offset)
     {
         return curSession->vars + offset;
     }
     
     /* module_internal.h */
     typedef int my_hello_var_t;
     extern size_t my_hello_var_offset;

     /* access macros */
     #define my_hello_var (*(my_hello_var_t*)(CurSessionVar(my_hello_var_offset)))

     /* module.c */
     size_t my_hello_var_offset = 0;
     
     void
     PG_init() {
         RegisterSessionVar(sizeof(my_hello_var_t), &my_hello_var_offset);
     }

For security reasons, offset could be mangled.

------

regards,
Yura Sokolov




В списке pgsql-hackers по дате отправления:

Предыдущее
От: Fujii Masao
Дата:
Сообщение: Re: [DOCS] alter_foreign_table.sgml typo
Следующее
От: Fujii Masao
Дата:
Сообщение: Re: Return value of pg_promote()