stats: add version field to stat segment base header 27/20127/6
authorOle Troan <ot@cisco.com>
Fri, 14 Jun 2019 08:26:14 +0000 (10:26 +0200)
committerDamjan Marion <dmarion@me.com>
Fri, 14 Jun 2019 11:52:50 +0000 (11:52 +0000)
Add a version in the base header of the stat segment
To make support for multiple reader implementations safer.

Change-Id: I6816e2a51a98c2df1e621e80d4ef0b4ba4e9f47b
Type: feature
Signed-off-by: Ole Troan <ot@cisco.com>
MAINTAINERS
src/vpp-api/client/stat_client.c
src/vpp-api/client/stat_client.h
src/vpp-api/python/vpp_papi/vpp_stats.py
src/vpp/stats/stat_segment.c
src/vpp/stats/stat_segment.h

index 5cd51f2..883ee5b 100644 (file)
@@ -363,6 +363,12 @@ I: vcl
 M:     Florin Coras <fcoras@cisco.com>
 F:     src/vcl
 
+Statistics Segment
+I:     stats
+M:     Ole Troan <ot@cisco.com>
+F:     src/vpp/stats/
+F:     src/vpp-api/client/stat_client.[ch]
+
 THE REST
 I:     misc
 C:     Contact vpp-dev Mailing List <vpp-dev@fd.io>
index 8991806..cfe213d 100644 (file)
@@ -509,6 +509,20 @@ stat_segment_index_to_name (uint32_t index)
   return stat_segment_index_to_name_r (index, sm);
 }
 
+uint64_t
+stat_segment_version_r (stat_client_main_t * sm)
+{
+  ASSERT (sm->shared_header);
+  return sm->shared_header->version;
+}
+
+uint64_t
+stat_segment_version (void)
+{
+  stat_client_main_t *sm = &stat_client_main;
+  return stat_segment_version_r (sm);
+}
+
 /*
  * fd.io coding-style-patch-verification: ON
  *
index 901ec32..12faddb 100644 (file)
@@ -78,6 +78,8 @@ double stat_segment_heartbeat (void);
 
 char *stat_segment_index_to_name_r (uint32_t index, stat_client_main_t * sm);
 char *stat_segment_index_to_name (uint32_t index);
+uint64_t stat_segment_version (void);
+uint64_t stat_segment_version_r (stat_client_main_t * sm);
 
 #endif /* included_stat_client_h */
 
index de72249..590549a 100644 (file)
@@ -49,6 +49,7 @@ typedef struct
 
 typedef struct
 {
+  uint64_t version;
   uint64_t epoch;
   uint64_t in_progress;
   uint64_t directory_offset;
@@ -82,6 +83,8 @@ double stat_segment_heartbeat_r (stat_client_main_t * sm);
 int stat_segment_vec_len(void *vec);
 uint8_t **stat_segment_string_vector(uint8_t **string_vector, char *string);
 char *stat_segment_index_to_name_r (uint32_t index, stat_client_main_t * sm);
+uint64_t stat_segment_version(void);
+uint64_t stat_segment_version_r(stat_client_main_t *sm);
 void free(void *ptr);
 """)
 
index 61b21ba..cef792f 100644 (file)
@@ -272,6 +272,9 @@ vlib_map_stat_segment_init (void)
 
   sm->directory_vector_by_name = hash_create_string (0, sizeof (uword));
   sm->shared_header = shared_header = memaddr;
+
+  shared_header->version = STAT_SEGMENT_VERSION;
+
   sm->stat_segment_lockp = clib_mem_alloc (sizeof (clib_spinlock_t));
   clib_spinlock_init (sm->stat_segment_lockp);
 
index b9ffedf..113eb9a 100644 (file)
@@ -70,11 +70,15 @@ typedef struct
 /* Default stat segment 32m */
 #define STAT_SEGMENT_DEFAULT_SIZE      (32<<20)
 
+/* Shared segment memory layout version */
+#define STAT_SEGMENT_VERSION           1
+
 /*
  * Shared header first in the shared memory segment.
  */
 typedef struct
 {
+  u64 version;
   atomic_int_fast64_t epoch;
   atomic_int_fast64_t in_progress;
   atomic_int_fast64_t directory_offset;