octopus: Use flounder definitions to specify size of result buffer
authorSimon Gerber <simon.gerber@inf.ethz.ch>
Mon, 22 Aug 2016 11:23:03 +0000 (13:23 +0200)
committerSimon Gerber <simon.gerber@inf.ethz.ch>
Mon, 22 Aug 2016 11:23:13 +0000 (13:23 +0200)
Increase response buffer size to 4096 in interface, and use interface
definitions to define size of skb result buffer, this is a stopgap measure
before we figure out a new unlimited interface for querying the SKB (directly
or through octopus) over the new fixed-size buffer flounder infrastructure.

Signed-off-by: Simon Gerber <simon.gerber@inf.ethz.ch>

if/octopus.if
include/octopus/definitions.h
lib/octopus/server/service.c

index 99d189e..87d1a81 100644 (file)
@@ -41,7 +41,7 @@ interface octopus "octopus RPC Interface" {
      * \param tid Id of registered trigger (0 in case no trigger registered).
      * \param error_code Error value of request.
      */
-    rpc get_names(in String query[2048], in trigger t, out String output[2048],
+    rpc get_names(in String query[4096], in trigger t, out String output[4096],
                   out trigger_id tid, out errval error_code);
 
     /**
@@ -51,7 +51,7 @@ interface octopus "octopus RPC Interface" {
      * \param tid Id of registered trigger (0 in case no trigger registered).
      * \param error_code Error value of request.
      */
-    rpc get(in String query[2048], in trigger t, out String output[2048],
+    rpc get(in String query[4096], in trigger t, out String output[4096],
             out trigger_id tid, out errval error_code);
 
     /**
@@ -64,8 +64,8 @@ interface octopus "octopus RPC Interface" {
      * \param tid Id of registered trigger (0 in case no trigger registered).
      * \param error_code Error value of request
      */
-    rpc set(in String query[2048], in uint64 mode, in trigger t, in bool get,
-            out String record[2048], out trigger_id tid, out errval error_code);
+    rpc set(in String query[4096], in uint64 mode, in trigger t, in bool get,
+            out String record[4096], out trigger_id tid, out errval error_code);
 
     /**
      * Find a record using an ID capability as the key/name of the record.
@@ -76,7 +76,7 @@ interface octopus "octopus RPC Interface" {
      * \param tid Id of registered trigger (0 in case no trigger registered).
      * \param error_code Error value of request.
      */
-    rpc get_with_idcap(in cap idcap, in trigger t, out String output[2048],
+    rpc get_with_idcap(in cap idcap, in trigger t, out String output[4096],
                        out trigger_id tid, out errval error_code);
 
     /**
@@ -102,7 +102,7 @@ interface octopus "octopus RPC Interface" {
      * \param tid Id of registered trigger (0 in case no trigger registered).
      * \param error_code Error value of request
      */
-    rpc del(in String query[2048], in trigger t, out trigger_id tid,
+    rpc del(in String query[4096], in trigger t, out trigger_id tid,
             out errval error_code);
 
     /**
@@ -111,7 +111,7 @@ interface octopus "octopus RPC Interface" {
      * \param tid Id of registered trigger (0 in case no trigger registered).
      * \param error_code Error value of request.
      */
-    rpc exists(in String query[2048], in trigger t, out trigger_id tid,
+    rpc exists(in String query[4096], in trigger t, out trigger_id tid,
                out errval error_code);
 
     /**
@@ -127,7 +127,7 @@ interface octopus "octopus RPC Interface" {
      * \param record
      * \param error_code
      */
-    rpc wait_for(in String query[2048], out String record[2048], out errval error_code);
+    rpc wait_for(in String query[4096], out String record[2048], out errval error_code);
 
     /**
      * \brief Used to remove Triggers in case they are not needed anymore.
@@ -153,7 +153,7 @@ interface octopus "octopus RPC Interface" {
      * \param id Identifier for this subscription supplied by server.
      * \param error_code Status of request.
      */
-    rpc subscribe(in String query[2048], in uint64 trigger_fn, in uint64 state,
+    rpc subscribe(in String query[4096], in uint64 trigger_fn, in uint64 state,
                   out uint64 id, out errval error_code);
 
     /**
index 584c5c4..3699ce3 100644 (file)
 #ifndef OCTOPUS_DEFINITIONS_H_
 #define OCTOPUS_DEFINITIONS_H_
 
-#define MAX_QUERY_LENGTH (10*1024)
+#include <if/octopus_defs.h>
+#include <bitmacros.h>
+
+/* compile max response length as maximum of possible interface sizes */
+#define MAX_QUERY_LENGTH \
+MAX(octopus__get_names_response_output_MAX_ARGUMENT_SIZE, \
+MAX(octopus__get_response_output_MAX_ARGUMENT_SIZE, \
+octopus__get_with_idcap_response_output_MAX_ARGUMENT_SIZE))
+
 
 
 //
index d467358..d9d09e7 100644 (file)
@@ -253,6 +253,11 @@ static void get_names_reply(struct octopus_binding* b,
             oct_rpc_enqueue_reply(b, drt);
             return;
         }
+        if (err_no(err) == FLOUNDER_ERR_TX_MSG_SIZE) {
+            debug_printf("max msg size: %u, reply size: %zu\n",
+                    octopus__get_names_response_output_MAX_ARGUMENT_SIZE,
+                    drt->query_state.std_out.length);
+        }
         USER_PANIC_ERR(err, "SKB sending %s failed!", __FUNCTION__);
     }
 }