maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #03667
Re: [Commits] Rev 2951: WL#12 - MariaDB User Feedback (a.k.a. Phone Home) plugin in http://bazaar.launchpad.net/~maria-captains/maria/5.1/
Hi, Michael!
On Oct 18, Michael Widenius wrote:
> +
> + // create a background thread to handle urls, if any
> + if (url_count)
> + {
> + pthread_mutex_init(&sleep_mutex, 0);
> + pthread_cond_init(&sleep_condition, 0);
> + shutdown_plugin= false;
>
> Please add a comment why you set 'shutdown_plugin' to false (as this
> is not a variable only for the feedback plugin).
This is a variable only for the feedback plugin.
> + pthread_attr_t attr;
> + pthread_attr_init(&attr);
> + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
> + if (pthread_create(&sender_thread, &attr, background_thread, 0) != 0)
> + {
>
> --- a/plugin/feedback/sender_thread.cc 1970-01-01 00:00:00 +0000
> +++ b/plugin/feedback/sender_thread.cc 2010-09-30 14:24:31 +0000
...
> + if (thd) // for nicer SHOW PROCESSLIST
> + thd->set_query(const_cast<char*>(url->url()), url->url_length());
>
> Wouldn't it be better if url->url() would return const char * ?
It does return const char*, but thd->set_query() wants char* (for no
good reason), so I need to cast const away.
> +
> + if (url->send(str.c_ptr(), str.length()))
>
> Use str.ptr() instead of str,c_ptr() (We already checked that this is ok)
Why?
> === added file 'plugin/feedback/url_base.cc'
>
> +Url* Url::create(const char *url, size_t url_length)
> +{
> + url= my_strndup(url, url_length, MYF(MY_WME));
>
> my_strndup() -> my_strmake()
Pardon me?
There's no such a function as my_strmake(). And strmake() only copies the
string, while my_strndup() allocates and copies. I need the latter.
> + if (!url)
> + return NULL;
> +
> --- a/plugin/feedback/url_http.cc 1970-01-01 00:00:00 +0000
> +++ a/plugin/feedback/url_http.cc 1970-01-01 00:00:00 +0000
> <cut>
>
> +Url* http_create(const char *url, size_t url_length)
> +{
> + const char *s;
> + LEX_STRING full_url= {const_cast<char*>(url), url_length};
> + LEX_STRING host, port, path;
>
> Would it not be better to introduce LEX_CONS_STRING and use these to
> avoid const away casts?
Perhaps, if I'd have more casts because of that. But just because of one
or two - I'd rather keep the code uniform instead and use LEX_STRING
everywhere.
> + bool ssl= false;
> +
> <cut>
>
> + /*
> + if the data were send successfully, read the reply.
> + Extract the first string between <h1>...</h1> tags
> + and put it as a server reply into the error log.
> + */
> + len= vio_read(vio, (uchar*)buf, sizeof(buf)-1);
> + if (len && len < sizeof(buf))
>
> Isn't len guaranteed to be < sizeof(buf) here ?
> I would change the check to 'if (len > 0)'
len is unsigned. vio_read() can return (uint)-1
which indicates and error and is certainly > sizeof(buf)
> + {
> + char *from;
> +
> + buf[len+1]= 0; // safety
> +
>
> Other ideas and suggestions:
>
> - It would be very imporant for us to know which plugins are
> loaded in the feedback. How can we do that ? (I assume we can't get
> that information with the current code)
We do it. fill_plugin_version() function in the utils.cc gets the list
of installed plugins and their versions.
By the way, I've added few more lines of information to the report -
after you've seen the code. On my computer they contain:
Uname_sysname Linux
Uname_release 2.6.34-gentoo-r6
Uname_version #1 SMP Mon Sep 6 15:26:42 CEST 2010
Uname_machine x86_64
Uname_distribution Gentoo Base System release 1.12.13
> From my point of view, when you have fixed the bugs and considered the
> suggestions it's ok to push in 5.1.
Thanks for the review! You've catched quite a few problems in the code.
Regards,
Sergei