Re: [EXT] Re: How to get a memory pointer in the core process
On 14.03.24 21:21, Joan Moreau wrote: I am trying to avoid closing/ reopening a file pointer to the exact same file between each call to the plugin That's still a "what" and not a "why". Long before you'll run into any serious resource problem, that file will be firmly seated in the disk cache and (r/o) accessing it will *effectively* be done in RAM; probably still not quite as efficient as Shared Memory, but. I seriously doubt that the dovecot developers will want to make their software into the plugins' new memory manager, replacing the kernel in that role - having a plugin run amok and cause the master dovecot process to abort due to OOM sounds like creating an even worse problem, frankly ... Kind regards, -- Jochen Bern Systemingenieur Binect GmbH smime.p7s Description: S/MIME Cryptographic Signature ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: [EXT] Re: How to get a memory pointer in the core process
From: Joan Moreau > I am trying to avoid closing/ reopening a file pointer to the exact same file > between each call to the plugin Can't you do an end-run around all this by having a persistent standalone process that holds all your persistent data, and the plugin collects session data and passes it to the persistent process via sockets? You'll have to have some initial handshake protocol to establish session context, but this seems the easiest way to accomplish what you want. Joseph Tam ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: [EXT] Re: How to get a memory pointer in the core process
Thanks Eduardo I am trying to avoid closing/ reopening a file pointer to the exact same file between each call to the plugin On 14 March 2024 20:08:37 Eduardo M KALINOWSKI via dovecot wrote: On 14/03/2024 02:49, Joan Moreau via dovecot wrote: No, you don´t understand There is a core process (/usr/bin/dovecot) running all the time. So I want to allocate a memory block, the core process keep it and it is retrievable by the pluging when laded again At exit of /usr/bin/dovecot, it just does a "delete()" of the said allocation While I cannot help you with plugin writing or dovecot internals, this does seem like an example of the XY problem[0]. Perhaps if you provide a high level description of what you're attempting to do someone might come up with a way to achieve that. [0] https://en.wikipedia.org/wiki/XY_problem -- Eduardo M KALINOWSKI edua...@kalinowski.com.br ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: [EXT] Re: How to get a memory pointer in the core process
On 14/03/2024 02:49, Joan Moreau via dovecot wrote: No, you don´t understand There is a core process (/usr/bin/dovecot) running all the time. So I want to allocate a memory block, the core process keep it and it is retrievable by the pluging when laded again At exit of /usr/bin/dovecot, it just does a "delete()" of the said allocation While I cannot help you with plugin writing or dovecot internals, this does seem like an example of the XY problem[0]. Perhaps if you provide a high level description of what you're attempting to do someone might come up with a way to achieve that. [0] https://en.wikipedia.org/wiki/XY_problem -- Eduardo M KALINOWSKI edua...@kalinowski.com.br ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: [EXT] Re: How to get a memory pointer in the core process
I do understand, and the problem is that your question is similar to asking how to get a memory pointer from systemd for your program. The short answer is, not doable. The bit longer answer is that /usr/sbin/dovecot is a fancy service supervisor, it's job is to launch and manage processes, it won't give you persistence service for data. Aki > On 14/03/2024 07:49 EET Joan Moreau via dovecot wrote: > > > No, you don´t understand > > There is a core process (/usr/bin/dovecot) running all the time. So I > want to allocate a memory block, the core process keep it and it is > retrievable by the pluging when laded again > > At exit of /usr/bin/dovecot, it just does a "delete()" of the said > allocation > > On 2024-03-14 13:25, Aki Tuomi via dovecot wrote: > > > Hi! > > > > Sorry but that's just not possible, ther is no "core" where to create > > such object. There is no "dovecot" where to store things. > > > > When user logs in, dovecot executes /usr/libexec/dovecot/imap and > > transfers the connection fd there. then plugins and stuff are loaded, > > and the user does what he does, and then plugins and stuff are unloaded > > and process exists and no longer exists in memory. > > > > You are clearly asking about memory persistence between sessions, and > > this can be done with > > > > a) services (internal or external), such as redis, sql, or something > > else > > b) storing things to disk > > > > Aki > > > > On 13/03/2024 18:45 EET Joan Moreau via dovecot > > wrote: > > > > No, I am not referring to that > > > > I want to create an object at first call in memory > > > > that object would be retrievable at second and furthers calls of the > > plugin, as long as dovecot is running > > > > On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: > > > > Not really no. You should use e.g. dict inteface for storing this kind > > of stateful data. When deinit is called the calling core process will > > likely die too. > > > > Aki > > > > On 13/03/2024 10:19 EET Joan Moreau wrote: > > > > Keep a pointer in memory retrievable each time a plugin is called > > > > So the plugin keep the memory, not has to restart everything at each > > call > > > > On 12 March 2024 08:53:38 Aki Tuomi via dovecot > > wrote: > > > > On 11/03/2024 10:42 EET Joan Moreau wrote: > > > > Hi > > Is it possible, from a plugin perspective, to create and recover a > > pointer in the core process (i.e. memory not lost between 2 calls to > > the plugin, even after the "deinit" of the plugin" ) ? > > > > Thanks > > Hi Joan! > > > > May I ask what you are attempting to achieve in more detail? > > > > Aki > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot-le...@dovecot.org > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot-leave@dovecot.orgNo, I am not > > referring to that > > I want to create an object at first call in memory > > that object would be retrievable at second and furthers calls of the > > plugin, as > > long as dovecot is running > > > > On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: > > Not really no. You should use e.g. dict inteface for storing this > > kind of stateful data. When deinit is called the calling core process > > will likely die too. > > > > Aki > > > > On 13/03/2024 10:19 EET Joan Moreau wrote: > > > > Keep a pointer in memory retrievable each time a plugin is > > called > > > > So the plugin keep the memory, not has to restart > > everything at each call > > > > On 12 March 2024 08:53:38 Aki Tuomi via dovecot > > wrote: > > > > On 11/03/2024 10:42 EET Joan Moreau > > wrote: > > > > Hi > > Is it possible, from a plugin > > perspective, to create and recover a > > pointer in the core process (i.e. > > memory not lost between 2 calls to the > > plugin, even after the "deinit" of the > > plugin" ) ? > > > > Thanks > > > > Hi Joan! > > > > May I ask what you are attempting to achieve in > > more detail? > > > > Aki > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot- > > le...@dovecot.org > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot-le...@dovecot.org > > > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot-le...@dovecot.org > ___ > dovecot mailing list -- dovecot@dovecot.org > To unsubscribe send an email to dovecot-leave@dovecot.orgNo, you don´t > understand > There is a core process (/usr/bin/dovecot) running all the time. So I want to > allocate a memory block, the core process keep it and it is retrievable by the > pluging when laded again > At exit
Re: [EXT] Re: How to get a memory pointer in the core process
No, you don´t understand There is a core process (/usr/bin/dovecot) running all the time. So I want to allocate a memory block, the core process keep it and it is retrievable by the pluging when laded again At exit of /usr/bin/dovecot, it just does a "delete()" of the said allocation On 2024-03-14 13:25, Aki Tuomi via dovecot wrote: Hi! Sorry but that's just not possible, ther is no "core" where to create such object. There is no "dovecot" where to store things. When user logs in, dovecot executes /usr/libexec/dovecot/imap and transfers the connection fd there. then plugins and stuff are loaded, and the user does what he does, and then plugins and stuff are unloaded and process exists and no longer exists in memory. You are clearly asking about memory persistence between sessions, and this can be done with a) services (internal or external), such as redis, sql, or something else b) storing things to disk Aki On 13/03/2024 18:45 EET Joan Moreau via dovecot wrote: No, I am not referring to that I want to create an object at first call in memory that object would be retrievable at second and furthers calls of the plugin, as long as dovecot is running On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: Not really no. You should use e.g. dict inteface for storing this kind of stateful data. When deinit is called the calling core process will likely die too. Aki On 13/03/2024 10:19 EET Joan Moreau wrote: Keep a pointer in memory retrievable each time a plugin is called So the plugin keep the memory, not has to restart everything at each call On 12 March 2024 08:53:38 Aki Tuomi via dovecot wrote: On 11/03/2024 10:42 EET Joan Moreau wrote: Hi Is it possible, from a plugin perspective, to create and recover a pointer in the core process (i.e. memory not lost between 2 calls to the plugin, even after the "deinit" of the plugin" ) ? Thanks Hi Joan! May I ask what you are attempting to achieve in more detail? Aki ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot- le...@dovecot.org ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot- leave@dovecot.orgNo, I am not referring to that I want to create an object at first call in memory that object would be retrievable at second and furthers calls of the plugin, as long as dovecot is running On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: Not really no. You should use e.g. dict inteface for storing this kind of stateful data. When deinit is called the calling core process will likely die too. Aki On 13/03/2024 10:19 EET Joan Moreau wrote: Keep a pointer in memory retrievable each time a plugin is called So the plugin keep the memory, not has to restart everything at each call On 12 March 2024 08:53:38 Aki Tuomi via dovecot wrote: On 11/03/2024 10:42 EET Joan Moreau wrote: Hi Is it possible, from a plugin perspective, to create and recover a pointer in the core process (i.e. memory not lost between 2 calls to the plugin, even after the "deinit" of the plugin" ) ? Thanks Hi Joan! May I ask what you are attempting to achieve in more detail? Aki ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot- le...@dovecot.org ___ dovecot mail
Re: [EXT] Re: How to get a memory pointer in the core process
Hi! Sorry but that's just not possible, ther is no "core" where to create such object. There is no "dovecot" where to store things. When user logs in, dovecot executes /usr/libexec/dovecot/imap and transfers the connection fd there. then plugins and stuff are loaded, and the user does what he does, and then plugins and stuff are unloaded and process exists and no longer exists in memory. You are clearly asking about memory persistence between sessions, and this can be done with a) services (internal or external), such as redis, sql, or something else b) storing things to disk Aki > On 13/03/2024 18:45 EET Joan Moreau via dovecot wrote: > > > No, I am not referring to that > > I want to create an object at first call in memory > > that object would be retrievable at second and furthers calls of the > plugin, as long as dovecot is running > > On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: > > > Not really no. You should use e.g. dict inteface for storing this kind > > of stateful data. When deinit is called the calling core process will > > likely die too. > > > > Aki > > > > On 13/03/2024 10:19 EET Joan Moreau wrote: > > > > Keep a pointer in memory retrievable each time a plugin is called > > > > So the plugin keep the memory, not has to restart everything at each > > call > > > > On 12 March 2024 08:53:38 Aki Tuomi via dovecot > > wrote: > > > > On 11/03/2024 10:42 EET Joan Moreau wrote: > > > > Hi > > Is it possible, from a plugin perspective, to create and recover a > > pointer in the core process (i.e. memory not lost between 2 calls to > > the plugin, even after the "deinit" of the plugin" ) ? > > > > Thanks > > Hi Joan! > > > > May I ask what you are attempting to achieve in more detail? > > > > Aki > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot-le...@dovecot.org > ___ > dovecot mailing list -- dovecot@dovecot.org > To unsubscribe send an email to dovecot-leave@dovecot.orgNo, I am not > referring to that > I want to create an object at first call in memory > that object would be retrievable at second and furthers calls of the plugin, > as > long as dovecot is running > > > > > On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: > Not really no. You should use e.g. dict inteface for storing this > kind of stateful data. When deinit is called the calling core process > will likely die too. > > Aki > > On 13/03/2024 10:19 EET Joan Moreau wrote: > > > Keep a pointer in memory retrievable each time a plugin is > called > > So the plugin keep the memory, not has to restart > everything at each call > > > > On 12 March 2024 08:53:38 Aki Tuomi via dovecot >wrote: > > On 11/03/2024 10:42 EET Joan Moreau > wrote: > > > Hi > Is it possible, from a plugin > perspective, to create and recover a > pointer in the core process (i.e. > memory not lost between 2 calls to the > plugin, even after the "deinit" of the > plugin" ) ? > > Thanks > >Hi Joan! > >May I ask what you are attempting to achieve in >more detail? > >Aki >___ >dovecot mailing list -- dovecot@dovecot.org >To unsubscribe send an email to dovecot- >le...@dovecot.org > ___ > dovecot mailing list -- dovecot@dovecot.org > To unsubscribe send an email to dovecot-le...@dovecot.org > > ___ > dovecot mailing list -- dovecot@dovecot.org > To unsubscribe send an email to dovecot-le...@dovecot.org ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: [EXT] Re: How to get a memory pointer in the core process
No, I am not referring to that I want to create an object at first call in memory that object would be retrievable at second and furthers calls of the plugin, as long as dovecot is running On 2024-03-13 16:29, Aki Tuomi via dovecot wrote: Not really no. You should use e.g. dict inteface for storing this kind of stateful data. When deinit is called the calling core process will likely die too. Aki On 13/03/2024 10:19 EET Joan Moreau wrote: Keep a pointer in memory retrievable each time a plugin is called So the plugin keep the memory, not has to restart everything at each call On 12 March 2024 08:53:38 Aki Tuomi via dovecot wrote: On 11/03/2024 10:42 EET Joan Moreau wrote: Hi Is it possible, from a plugin perspective, to create and recover a pointer in the core process (i.e. memory not lost between 2 calls to the plugin, even after the "deinit" of the plugin" ) ? Thanks Hi Joan! May I ask what you are attempting to achieve in more detail? Aki ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot- le...@dovecot.org ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: [EXT] Re: How to get a memory pointer in the core process
Not really no. You should use e.g. dict inteface for storing this kind of stateful data. When deinit is called the calling core process will likely die too. Aki > On 13/03/2024 10:19 EET Joan Moreau wrote: > > > Keep a pointer in memory retrievable each time a plugin is called > > So the plugin keep the memory, not has to restart everything at each call > > > > On 12 March 2024 08:53:38 Aki Tuomi via dovecot wrote: > > > > On 11/03/2024 10:42 EET Joan Moreau wrote: > > > > > > > > > Hi > > > Is it possible, from a plugin perspective, to create and recover a > > > pointer in the core process (i.e. memory not lost between 2 calls to the > > > plugin, even after the "deinit" of the plugin" ) ? > > > > > > Thanks > > > > Hi Joan! > > > > May I ask what you are attempting to achieve in more detail? > > > > Aki > > ___ > > dovecot mailing list -- dovecot@dovecot.org > > To unsubscribe send an email to dovecot-le...@dovecot.org > ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: How to get a memory pointer in the core process
Keep a pointer in memory retrievable each time a plugin is called So the plugin keep the memory, not has to restart everything at each call On 12 March 2024 08:53:38 Aki Tuomi via dovecot wrote: On 11/03/2024 10:42 EET Joan Moreau wrote: Hi Is it possible, from a plugin perspective, to create and recover a pointer in the core process (i.e. memory not lost between 2 calls to the plugin, even after the "deinit" of the plugin" ) ? Thanks Hi Joan! May I ask what you are attempting to achieve in more detail? Aki ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: How to get a memory pointer in the core process
> On 11/03/2024 10:42 EET Joan Moreau wrote: > > > Hi > Is it possible, from a plugin perspective, to create and recover a pointer in > the core process (i.e. memory not lost between 2 calls to the plugin, even > after the "deinit" of the plugin" ) ? > > Thanks Hi Joan! May I ask what you are attempting to achieve in more detail? Aki ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org
Re: How to get a memory pointer in the core process
> On 11/03/2024 12:53 EET Aki Tuomi wrote: > > > > On 11/03/2024 10:42 EET Joan Moreau wrote: > > > > > > Hi > > Is it possible, from a plugin perspective, to create and recover a pointer > > in the core process (i.e. memory not lost between 2 calls to the plugin, > > even after the "deinit" of the plugin" ) ? > > > > Thanks > > Hi Joan! > > May I ask what you are attempting to achieve in more detail? > > Aki Resending. Aki ___ dovecot mailing list -- dovecot@dovecot.org To unsubscribe send an email to dovecot-le...@dovecot.org