Fix SimpleForwardToFrontend() and SimpleForwardToBackend(). If
authorTatsuo Ishii <ishii at sraoss.co.jp>
Sat, 25 Mar 2006 08:15:30 +0000 (08:15 +0000)
committerTatsuo Ishii <ishii at sraoss.co.jp>
Sat, 25 Mar 2006 08:15:30 +0000 (08:15 +0000)
the packet length is 0 then do not forward the packet.

Fix pool_process_query(). If kind/kind1 from backends exists *and*
data coming from frontend, kind/kind1 will be lost.

pool_process_query.c

index 331ffdd0f207283a42b37342e688e1a952e81e26..e3afb10c026c2dca6a40b8e23312e1012da0cbf6 100644 (file)
@@ -263,7 +263,14 @@ POOL_STATUS pool_process_query(POOL_CONNECTION *frontend,
                                if (status != POOL_CONTINUE)
                                        return status;
 
-                               continue;
+                               if (kind != 0 || kind1 != 0)
+                               {
+                                       pool_debug("kind(%02x) or kind1(%02x) != 0", kind, kind1);
+                               }
+                               else
+                               {
+                                       continue;
+                               }
                        }
                }
                else
@@ -311,7 +318,14 @@ POOL_STATUS pool_process_query(POOL_CONNECTION *frontend,
                                if (status != POOL_CONTINUE)
                                        return status;
 
-                               continue;
+                               if (kind != 0 || kind1 != 0)
+                               {
+                                       pool_debug("cached kind(%02x) or kind1(%02x) != 0", kind, kind1);
+                               }
+                               else
+                               {
+                                       continue;
+                               }
                        }
                }
 
@@ -2242,20 +2256,18 @@ POOL_STATUS SimpleForwardToFrontend(char kind, POOL_CONNECTION *frontend, POOL_C
 
        pool_write(frontend, &len, sizeof(len));
 
-       len = ntohl(len);
-       len -= 4;
+       len = ntohl(len) - 4 ;
+
+       if (len <= 0)
+               return POOL_CONTINUE;
 
        p = pool_read2(MASTER(backend), len);
        if (p == NULL)
                return POOL_END;
 
        if (REPLICATION)
-       {
-               len1 = ntohl(len1);
-               len1 -= 4;
-               if (pool_read2(SECONDARY(backend), len1) == NULL)
+               if (pool_read2(SECONDARY(backend), len) == NULL)
                        return POOL_END;
-       }
 
        return pool_write(frontend, p, len);
 }
@@ -2277,24 +2289,26 @@ POOL_STATUS SimpleForwardToBackend(char kind, POOL_CONNECTION *frontend, POOL_CO
                return POOL_END;
        }
 
+       if (pool_write(MASTER(backend), &sendlen, sizeof(sendlen)))
+               return POOL_END;
+       if (REPLICATION)
+               if (pool_write(SECONDARY(backend), &sendlen, sizeof(sendlen)))
+                       return POOL_END;
+
        len = ntohl(sendlen) - 4;
 
+       if (len <= 0)
+               return POOL_CONTINUE;
+
        p = pool_read2(frontend, len);
        if (p == NULL)
                return POOL_END;
 
-       if (pool_write(MASTER(backend), &sendlen, sizeof(sendlen)))
-               return POOL_END;
        if (pool_write(MASTER(backend), p, len))
                return POOL_END;
-
        if (REPLICATION)
-       {
-               if (pool_write(SECONDARY(backend), &sendlen, sizeof(sendlen)))
-                       return POOL_END;
                if (pool_write(SECONDARY(backend), p, len))
                        return POOL_END;
-       }
 
        return POOL_CONTINUE;
 }