[PATCH 4/8] ch: poll with -1 in chSocketRecv

Purna Pavan Chandra posted 8 patches 2 months, 2 weeks ago
There is a newer version of this series
[PATCH 4/8] ch: poll with -1 in chSocketRecv
Posted by Purna Pavan Chandra 2 months, 2 weeks ago
chSocketRecv fn can be used by operations such as restore, which cannot
have a specific poll timeout. The runtime of these operations at server
side (vmm) cannot be determined or capped as it depends on the guest
configuration. Hence, pass -1 as timeout to poll to make wait until
there's a response from server.

Signed-off-by: Purna Pavan Chandra <paekkaladevi@linux.microsoft.com>
---
 src/ch/ch_process.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c
index 668a53a1c2..3f2a3f81e5 100644
--- a/src/ch/ch_process.c
+++ b/src/ch/ch_process.c
@@ -530,9 +530,6 @@ chMonitorSocketConnect(virCHMonitor *mon)
     return -1;
 }
 
-
-#define PKT_TIMEOUT_MS 500 /* ms */
-
 static char *
 chSocketRecv(int sock)
 {
@@ -547,7 +544,7 @@ chSocketRecv(int sock)
     pfds[0].events = POLLIN;
 
     do {
-        ret = poll(pfds, G_N_ELEMENTS(pfds), PKT_TIMEOUT_MS);
+        ret = poll(pfds, G_N_ELEMENTS(pfds), -1);
     } while (ret < 0 && errno == EINTR);
 
     if (ret <= 0) {
@@ -571,8 +568,6 @@ chSocketRecv(int sock)
     return g_steal_pointer(&buf);
 }
 
-#undef PKT_TIMEOUT_MS
-
 static int
 chSocketProcessHttpResponse(int sock)
 {
-- 
2.34.1
Re: [PATCH 4/8] ch: poll with -1 in chSocketRecv
Posted by Praveen K Paladugu 2 months, 2 weeks ago

On 6/28/2024 2:26 AM, Purna Pavan Chandra wrote:
> chSocketRecv fn can be used by operations such as restore, which cannot
> have a specific poll timeout. The runtime of these operations at server
> side (vmm) cannot be determined or capped as it depends on the guest
> configuration. Hence, pass -1 as timeout to poll to make wait until
> there's a response from server.
> 
> Signed-off-by: Purna Pavan Chandra <paekkaladevi@linux.microsoft.com>
> ---
>   src/ch/ch_process.c | 7 +------
>   1 file changed, 1 insertion(+), 6 deletions(-)
> 
> diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c
> index 668a53a1c2..3f2a3f81e5 100644
> --- a/src/ch/ch_process.c
> +++ b/src/ch/ch_process.c
> @@ -530,9 +530,6 @@ chMonitorSocketConnect(virCHMonitor *mon)
>       return -1;
>   }
>   
> -
> -#define PKT_TIMEOUT_MS 500 /* ms */
> -
>   static char *
>   chSocketRecv(int sock)
>   {
> @@ -547,7 +544,7 @@ chSocketRecv(int sock)
>       pfds[0].events = POLLIN;
>   
>       do {
> -        ret = poll(pfds, G_N_ELEMENTS(pfds), PKT_TIMEOUT_MS);
> +        ret = poll(pfds, G_N_ELEMENTS(pfds), -1);

As we'd like "restore" operation to be synchronous we can keep polling 
until libvirt gets a response.

But for rest of the operations, we should retain the timeout. For 
example, if CH process crashes after receiving the request to add net 
FDs, we'd like Libvirt to continue instead of waiting for a response 
forever.

You can add an additional argument to this function to choose if timeout 
should be used or not. And not use the timeout during restore operation.

>       } while (ret < 0 && errno == EINTR);
>   
>       if (ret <= 0) {
> @@ -571,8 +568,6 @@ chSocketRecv(int sock)
>       return g_steal_pointer(&buf);
>   }
>   
> -#undef PKT_TIMEOUT_MS
> -
>   static int
>   chSocketProcessHttpResponse(int sock)
>   {

-- 
Regards,
Praveen