Print

Print


Tatiana, John

Can you do the following:

a) turn on general query log for mysqld by adding

   general_log=1
   log-output=TABLE

   to /etc/my.cnf under [mysqld]
   and restarting mysql

b) re-run whatever you are typically running that
    is having problems via qserv (have it talk to
    the mysqld with general log enabled)

c) send us the output from
    select * from mysql.general_log

I will try to re-play it on my local qserv instance
to reproduce things.

Thanks,
Jacek



On 11/14/2014 09:01 PM, Jacek Becla wrote:
> Nope! It is not the "set" query. I run it by hand,
> and I got:
>
>
> SET @@session.autocommit = 1;
>
> +------------------------------------------+
> | no-field-name                            |
> +------------------------------------------+
> | Ignoring meaningless command (in Qserv). |
> +------------------------------------------+
>
> and after that Qserv was happily running.
>
> ---
>
> I don't know how deeply you depend on the query
> that Tatiana mentioned earlier:
>
>
> show columns from DeepSource from LSST;
>
> Because that query will consistently fail right now
> with something like:
>
> ERROR 4110 (Proxy): Qserv error: 'ParseException:ANTLR parse
> error:unexpected token: show:'
>
> we are not supporting "show columns" commands.
>
> We are working on code that will make implementing this
> command easier. Adding support for this is in a quick
> and dirty way right now would be non-trivial.
>
> So, Tatiana / Trey, let us know if you can get away
> without "show columns" queries in the near term.
>
> Jacek
>
>
>
>
>
> On 11/12/2014 02:55 PM, Daniel L. Wang wrote:
>> Hi John,
>>
>> I'm betting that the problem occurs here:
>>
>> -> 1291         self._execute_query("SET @@session.autocommit =
>> {0}".format(switch))
>>
>> "SET..." is not supported right now.
>>
>> Qserv doesn't really handle much other than SELECT statements. For the
>> longest time, we were focused on handling those well. Though they aren't
>> perfect, we think qserv handles them well enough to support some
>> practical usage now. One area that has gotten very little attention is
>> in supporting things other than SQL SELECT queries. There is some
>> short-circuit code that handles the few extra commands that the
>> command-line "mysql" binary sends without user intervention, because
>> that's what we test with.
>>
>> I think in this case, the best idea might be to save the proxy logs from
>> connecting with the JDBC driver and with the mysql-connector. None of us
>> (AFAIK) have tested with those, but we could see putting in some more
>> short-circuit code to triage the "extracurricular" queries they send (we
>> can put in some semi-reasonable canned responses), and that could very
>> well get things working. We haven't set aside any space in our Nov
>> sprint to work on this, but we might be able to squeeze it in, deferring
>> existing tickets (Jacek will have to decide).
>>
>> In the meantime, you might be able to workaround this by calling the
>> mysql binary in a shell process and then processing the output. In
>> python, this wouldn't be too bad, and I might claim that the code is
>> only incrementally more complex than using the API, and the performance
>> (in practice) is mostly indistinguishable for, say, up to 10k or 100k
>> result rows.
>>
>> FYI, qserv internally uses mysqldb when connecting to mysqld through
>> Python, and the raw mysql C-API when connecting with C++.
>>
>> Hope this helps,
>> -Daniel
>>
>>
>> On 11/11/2014 08:27 PM, John Rector wrote:
>>> Hi Daniel,
>>>
>>> This is a follow-up on my earlier note about trouble accessing Qserv
>>> with JDBC. I tried a python module as well. (Results are not in the
>>> logs I sent you, but I can send them if it's helpful.)
>>>
>>> ~> pip list | grep mysql
>>> *mysql-connector-python (2.0.2)*
>>>
>>> It worked when I tried to connect to a standard MySQL db, but not when
>>> I tried to connect to qserv.  Immediately following the failure, I cut
>>> and pasted the qserv connection values I had used  into a /mysql/
>>> command in the same terminal session. That connect to the LSST db.
>>> Below is the output from the Python connection attempt.
>>>
>>> BTW: is there a preferred Python module to use with qserv? I have a
>>> few, but tried only one tonight—the one from the MySQL site. One more
>>> question, has anyone tried to fill a Pandas data frame directly from a
>>> qserv query?
>>>
>>> My ipython session:
>>>
>>> In [1]: *import mysql.connector*
>>>
>>> In [2]:*cnx = mysql.connector.connect(user='qsmaster',
>>> host='lsst-db1.ipac.caltech.edu <http://lsst-db1.ipac.caltech.edu>',
>>> database='LSST', port=4040)*
>>>
>>> ---------------------------------------------------------------------------
>>>
>>> InternalError                             Traceback (most recent call
>>> last)
>>> <ipython-input-2-15e0754e8f3a> in <module>()
>>> ----> 1 cnx = mysql.connector.connect(user='qsmaster',
>>> host='lsst-db1.ipac.caltech.edu <http://lsst-db1.ipac.caltech.edu>',
>>> database='LSST', port=4040)
>>>
>>> /Users/johnrector/anaconda/lib/python2.7/site-packages/mysql/connector/__init__.pyc
>>>
>>> in connect(*args, **kwargs)
>>>     157
>>>     158     # Regular connection
>>> --> 159     return MySQLConnection(*args, **kwargs)
>>>     160 Connect = connect  # pylint: disable=C0103
>>>     161
>>>
>>> /Users/johnrector/anaconda/lib/python2.7/site-packages/mysql/connector/connection.pyc
>>>
>>> in __init__(self, *args, **kwargs)
>>>     127
>>>     128         if len(kwargs) > 0:
>>> --> 129             self.connect(**kwargs)
>>>     130
>>>     131     def _get_self(self):
>>>
>>> /Users/johnrector/anaconda/lib/python2.7/site-packages/mysql/connector/connection.pyc
>>>
>>> in connect(self, **kwargs)
>>>     453         self.disconnect()
>>>     454         self._open_connection()
>>> --> 455         self._post_connection()
>>>     456
>>>     457     def shutdown(self):
>>>
>>> /Users/johnrector/anaconda/lib/python2.7/site-packages/mysql/connector/connection.pyc
>>>
>>> in _post_connection(self)
>>>     433         """
>>>     434         self.set_charset_collation(self._charset_id)
>>> --> 435         self.autocommit = self._autocommit
>>>     436         if self._time_zone:
>>>     437             self.time_zone = self._time_zone
>>>
>>> /Users/johnrector/anaconda/lib/python2.7/site-packages/mysql/connector/connection.pyc
>>>
>>> in set_autocommit(self, value)
>>>    1289         """Toggle autocommit"""
>>>    1290         switch = 'ON' if value else 'OFF'
>>> -> 1291         self._execute_query("SET @@session.autocommit =
>>> {0}".format(switch))
>>>    1292         self._autocommit = value
>>>    1293
>>>
>>> /Users/johnrector/anaconda/lib/python2.7/site-packages/mysql/connector/connection.pyc
>>>
>>> in _execute_query(self, query)
>>>    1495         """
>>>    1496         if self._unread_result is True:
>>> -> 1497             raise errors.InternalError("Unread result found.")
>>>    1498
>>>    1499         self.cmd_query(query)
>>>
>>> InternalError: Unread result found.
>>>
>>> ______________________________
>>> John Rector
>>> IPAC, California Institute of Technology
>>> MS 100-22
>>> 770 S. Wilson Ave.
>>> Pasadena, CA 91125
>>> USA
>>> Tel: (626) 395—8577
>>>
>>>
>>>
>>>
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> Use REPLY-ALL to reply to list
>>
>> To unsubscribe from the QSERV-L list, click the following link:
>> https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=QSERV-L&A=1
>>
>

########################################################################
Use REPLY-ALL to reply to list

To unsubscribe from the QSERV-L list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=QSERV-L&A=1