From: Brad N. <BNI...@no...> - 2008-11-21 18:27:39
|
>>> On 11/21/2008 at 8:24 AM, in message <200...@ma...>, Matt Jamison <ma...@ma...> wrote: > Hello, > > I'm building some custom C metric modules for gmond, and I've run into what > seems like a strange limitation on the length of values for string type > metrics. Perhaps I'm just missing some magic, but it appears I'm limited to > > returning 32 characters for the value, due to the size > of "MAX_G_STRING_SIZE". I say this is strange to me, because I can return > much larger messages via the gmetric command line utility, seemingly > indicating that the protocol/messages are capable of holding much more... > > Any pointers on returning larger strings via a custom module, or maybe an > explanation on this limitation to satisfy my curiosity? > This is actually an interesting question now that I have gone back to look at the source code. Originally it had to do with limiting the XDR packet size. The length of a string value metric was never meant to be very large. Values returned as strings were meant to be small pieces of information such as the OS name or something like that. So when the XDR packets (the platform independent data packets that are passed between gmond's) were defined, the max string length was set to 32. The base XDR packet definition was done early in the ganglia development and has just carried over into later versions. This carried over into the definition of the g_val_t structure which is the structure that is used to pass data between the metric functions or modules back to gmond. However after looking at the XDR definitions again, I am not seeing the 32 byte limitation in the structure definition which is probably why you are able to pass larger strings through gmetric. Gmetric doesn't have to pass the metric value through a g_val_t structure before it is loaded into an XDR value packet therefore the string isn't limited by MAX_G_STRING_SIZE. Anyway, this is probably something that needs to be looked at closer in a future version of Ganglia. There might still be a reason for the 32 byte limit, but I am not seeing it other than the limitation of the g_val_t structure. Brad |