farcepest / MySQLdb1

MySQL database connector for Python (legacy version)
https://sourceforge.net/projects/mysql-python/
666 stars 318 forks source link

Segmentation fault under PyPy when performing concurrent queries with Twisted #79

Open dellis23 opened 10 years ago

dellis23 commented 10 years ago

The following code reproduces the problem. I've upped the number of connections to make the problem arise quicker, but the default twisted connection pool of 5 also causes the same issue. The issue appears to arise primarily on large number of rows (though I haven't tested a large number of columns with few rows). For this example, I ran it on a table with the following schema:

+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| test  | varchar(32) | YES  |     | NULL    |                |
| RID   | int(11)     | NO   | PRI | NULL    | auto_increment |
+-------+-------------+------+-----+---------+----------------+

I inserted 1000 rows, all consisting of the single character "a". I will also attach the mysql dump of the table for ease of reproduction.

from twisted.enterprise import adbapi
from twisted.internet import reactor

dbpool = adbapi.ConnectionPool(
    "MySQLdb", host='localhost',
    cp_max=10, cp_min=10, db='x', user='x', passwd='x')

def select():
    return dbpool.runQuery("SELECT * FROM test")

num = 0

def print_result(result):
    global num
    print "Done", num
    num += 1

for i in xrange(1, 1000):
    select().addCallback(print_result)

print "Done Adding"

reactor.run()
dellis23 commented 10 years ago

MySQL dump to recreate conditions:

-- MySQL dump 10.13  Distrib 5.5.35, for Linux (x86_64)
--
-- Host: localhost    Database: x
-- ------------------------------------------------------
-- Server version       5.5.35-33.0-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `test`
--

DROP TABLE IF EXISTS `test`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test` (
  `test` varchar(32) DEFAULT NULL,
  `RID` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`RID`)
) ENGINE=InnoDB AUTO_INCREMENT=1006 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `test`
--

LOCK TABLES `test` WRITE;
/*!40000 ALTER TABLE `test` DISABLE KEYS */;
INSERT INTO `test` VALUES ('a',1),('a',2),('a',3),('a',4),('a',5),('a',6),('a',7),('a',8),('a',9),('a',10),('a',11),('a',12),('a',13),('a',14),('a',15),('a',16),('a',17),('a',18),('a',19),('a',20),('a',21),('a',22),('a',23),('a',24),('a',25),('a',26),('a',27),('a',28),('a',29),('a',30),('a',31),('a',32),('a',33),('a',34),('a',35),('a',36),('a',37),('a',38),('a',39),('a',40),('a',41),('a',42),('a',43),('a',44),('a',45),('a',46),('a',47),('a',48),('a',49),('a',50),('a',51),('a',52),('a',53),('a',54),('a',55),('a',56),('a',57),('a',58),('a',59),('a',60),('a',61),('a',62),('a',63),('a',64),('a',65),('a',66),('a',67),('a',68),('a',69),('a',70),('a',71),('a',72),('a',73),('a',74),('a',75),('a',76),('a',77),('a',78),('a',79),('a',80),('a',81),('a',82),('a',83),('a',84),('a',85),('a',86),('a',87),('a',88),('a',89),('a',90),('a',91),('a',92),('a',93),('a',94),('a',95),('a',96),('a',97),('a',98),('a',99),('a',100),('a',101),('a',102),('a',103),('a',104),('a',105),('a',106),('a',107),('a',108),('a',109),('a',110),('a',111),('a',112),('a',113),('a',114),('a',115),('a',116),('a',117),('a',118),('a',119),('a',120),('a',121),('a',122),('a',123),('a',124),('a',125),('a',126),('a',127),('a',128),('a',129),('a',130),('a',131),('a',132),('a',133),('a',134),('a',135),('a',136),('a',137),('a',138),('a',139),('a',140),('a',141),('a',142),('a',143),('a',144),('a',145),('a',146),('a',147),('a',148),('a',149),('a',150),('a',151),('a',152),('a',153),('a',154),('a',155),('a',156),('a',157),('a',158),('a',159),('a',160),('a',161),('a',162),('a',163),('a',164),('a',165),('a',166),('a',167),('a',168),('a',169),('a',170),('a',171),('a',172),('a',173),('a',174),('a',175),('a',176),('a',177),('a',178),('a',179),('a',180),('a',181),('a',182),('a',183),('a',184),('a',185),('a',186),('a',187),('a',188),('a',189),('a',190),('a',191),('a',192),('a',193),('a',194),('a',195),('a',196),('a',197),('a',198),('a',199),('a',200),('a',201),('a',202),('a',203),('a',204),('a',205),('a',206),('a',207),('a',208),('a',209),('a',210),('a',211),('a',212),('a',213),('a',214),('a',215),('a',216),('a',217),('a',218),('a',219),('a',220),('a',221),('a',222),('a',223),('a',224),('a',225),('a',226),('a',227),('a',228),('a',229),('a',230),('a',231),('a',232),('a',233),('a',234),('a',235),('a',236),('a',237),('a',238),('a',239),('a',240),('a',241),('a',242),('a',243),('a',244),('a',245),('a',246),('a',247),('a',248),('a',249),('a',250),('a',251),('a',252),('a',253),('a',254),('a',255),('a',256),('a',257),('a',258),('a',259),('a',260),('a',261),('a',262),('a',263),('a',264),('a',265),('a',266),('a',267),('a',268),('a',269),('a',270),('a',271),('a',272),('a',273),('a',274),('a',275),('a',276),('a',277),('a',278),('a',279),('a',280),('a',281),('a',282),('a',283),('a',284),('a',285),('a',286),('a',287),('a',288),('a',289),('a',290),('a',291),('a',292),('a',293),('a',294),('a',295),('a',296),('a',297),('a',298),('a',299),('a',300),('a',301),('a',302),('a',303),('a',304),('a',305),('a',306),('a',307),('a',308),('a',309),('a',310),('a',311),('a',312),('a',313),('a',314),('a',315),('a',316),('a',317),('a',318),('a',319),('a',320),('a',321),('a',322),('a',323),('a',324),('a',325),('a',326),('a',327),('a',328),('a',329),('a',330),('a',331),('a',332),('a',333),('a',334),('a',335),('a',336),('a',337),('a',338),('a',339),('a',340),('a',341),('a',342),('a',343),('a',344),('a',345),('a',346),('a',347),('a',348),('a',349),('a',350),('a',351),('a',352),('a',353),('a',354),('a',355),('a',356),('a',357),('a',358),('a',359),('a',360),('a',361),('a',362),('a',363),('a',364),('a',365),('a',366),('a',367),('a',368),('a',369),('a',370),('a',371),('a',372),('a',373),('a',374),('a',375),('a',376),('a',377),('a',378),('a',379),('a',380),('a',381),('a',382),('a',383),('a',384),('a',385),('a',386),('a',387),('a',388),('a',389),('a',390),('a',391),('a',392),('a',393),('a',394),('a',395),('a',396),('a',397),('a',398),('a',399),('a',400),('a',401),('a',402),('a',403),('a',404),('a',405),('a',406),('a',407),('a',408),('a',409),('a',410),('a',411),('a',412),('a',413),('a',414),('a',415),('a',416),('a',417),('a',418),('a',419),('a',420),('a',421),('a',422),('a',423),('a',424),('a',425),('a',426),('a',427),('a',428),('a',429),('a',430),('a',431),('a',432),('a',433),('a',434),('a',435),('a',436),('a',437),('a',438),('a',439),('a',440),('a',441),('a',442),('a',443),('a',444),('a',445),('a',446),('a',447),('a',448),('a',449),('a',450),('a',451),('a',452),('a',453),('a',454),('a',455),('a',456),('a',457),('a',458),('a',459),('a',460),('a',461),('a',462),('a',463),('a',464),('a',465),('a',466),('a',467),('a',468),('a',469),('a',470),('a',471),('a',472),('a',473),('a',474),('a',475),('a',476),('a',477),('a',478),('a',479),('a',480),('a',481),('a',482),('a',483),('a',484),('a',485),('a',486),('a',487),('a',488),('a',489),('a',490),('a',491),('a',492),('a',493),('a',494),('a',495),('a',496),('a',497),('a',498),('a',499),('a',500),('a',501),('a',502),('a',503),('a',504),('a',505),('a',506),('a',507),('a',508),('a',509),('a',510),('a',511),('a',512),('a',513),('a',514),('a',515),('a',516),('a',517),('a',518),('a',519),('a',520),('a',521),('a',522),('a',523),('a',524),('a',525),('a',526),('a',527),('a',528),('a',529),('a',530),('a',531),('a',532),('a',533),('a',534),('a',535),('a',536),('a',537),('a',538),('a',539),('a',540),('a',541),('a',542),('a',543),('a',544),('a',545),('a',546),('a',547),('a',548),('a',549),('a',550),('a',551),('a',552),('a',553),('a',554),('a',555),('a',556),('a',557),('a',558),('a',559),('a',560),('a',561),('a',562),('a',563),('a',564),('a',565),('a',566),('a',567),('a',568),('a',569),('a',570),('a',571),('a',572),('a',573),('a',574),('a',575),('a',576),('a',577),('a',578),('a',579),('a',580),('a',581),('a',582),('a',583),('a',584),('a',585),('a',586),('a',587),('a',588),('a',589),('a',590),('a',591),('a',592),('a',593),('a',594),('a',595),('a',596),('a',597),('a',598),('a',599),('a',600),('a',601),('a',602),('a',603),('a',604),('a',605),('a',606),('a',607),('a',608),('a',609),('a',610),('a',611),('a',612),('a',613),('a',614),('a',615),('a',616),('a',617),('a',618),('a',619),('a',620),('a',621),('a',622),('a',623),('a',624),('a',625),('a',626),('a',627),('a',628),('a',629),('a',630),('a',631),('a',632),('a',633),('a',634),('a',635),('a',636),('a',637),('a',638),('a',639),('a',640),('a',641),('a',642),('a',643),('a',644),('a',645),('a',646),('a',647),('a',648),('a',649),('a',650),('a',651),('a',652),('a',653),('a',654),('a',655),('a',656),('a',657),('a',658),('a',659),('a',660),('a',661),('a',662),('a',663),('a',664),('a',665),('a',666),('a',667),('a',668),('a',669),('a',670),('a',671),('a',672),('a',673),('a',674),('a',675),('a',676),('a',677),('a',678),('a',679),('a',680),('a',681),('a',682),('a',683),('a',684),('a',685),('a',686),('a',687),('a',688),('a',689),('a',690),('a',691),('a',692),('a',693),('a',694),('a',695),('a',696),('a',697),('a',698),('a',699),('a',700),('a',701),('a',702),('a',703),('a',704),('a',705),('a',706),('a',707),('a',708),('a',709),('a',710),('a',711),('a',712),('a',713),('a',714),('a',715),('a',716),('a',717),('a',718),('a',719),('a',720),('a',721),('a',722),('a',723),('a',724),('a',725),('a',726),('a',727),('a',728),('a',729),('a',730),('a',731),('a',732),('a',733),('a',734),('a',735),('a',736),('a',737),('a',738),('a',739),('a',740),('a',741),('a',742),('a',743),('a',744),('a',745),('a',746),('a',747),('a',748),('a',749),('a',750),('a',751),('a',752),('a',753),('a',754),('a',755),('a',756),('a',757),('a',758),('a',759),('a',760),('a',761),('a',762),('a',763),('a',764),('a',765),('a',766),('a',767),('a',768),('a',769),('a',770),('a',771),('a',772),('a',773),('a',774),('a',775),('a',776),('a',777),('a',778),('a',779),('a',780),('a',781),('a',782),('a',783),('a',784),('a',785),('a',786),('a',787),('a',788),('a',789),('a',790),('a',791),('a',792),('a',793),('a',794),('a',795),('a',796),('a',797),('a',798),('a',799),('a',800),('a',801),('a',802),('a',803),('a',804),('a',805),('a',806),('a',807),('a',808),('a',809),('a',810),('a',811),('a',812),('a',813),('a',814),('a',815),('a',816),('a',817),('a',818),('a',819),('a',820),('a',821),('a',822),('a',823),('a',824),('a',825),('a',826),('a',827),('a',828),('a',829),('a',830),('a',831),('a',832),('a',833),('a',834),('a',835),('a',836),('a',837),('a',838),('a',839),('a',840),('a',841),('a',842),('a',843),('a',844),('a',845),('a',846),('a',847),('a',848),('a',849),('a',850),('a',851),('a',852),('a',853),('a',854),('a',855),('a',856),('a',857),('a',858),('a',859),('a',860),('a',861),('a',862),('a',863),('a',864),('a',865),('a',866),('a',867),('a',868),('a',869),('a',870),('a',871),('a',872),('a',873),('a',874),('a',875),('a',876),('a',877),('a',878),('a',879),('a',880),('a',881),('a',882),('a',883),('a',884),('a',885),('a',886),('a',887),('a',888),('a',889),('a',890),('a',891),('a',892),('a',893),('a',894),('a',895),('a',896),('a',897),('a',898),('a',899),('a',900),('a',901),('a',902),('a',903),('a',904),('a',905),('a',906),('a',907),('a',908),('a',909),('a',910),('a',911),('a',912),('a',913),('a',914),('a',915),('a',916),('a',917),('a',918),('a',919),('a',920),('a',921),('a',922),('a',923),('a',924),('a',925),('a',926),('a',927),('a',928),('a',929),('a',930),('a',931),('a',932),('a',933),('a',934),('a',935),('a',936),('a',937),('a',938),('a',939),('a',940),('a',941),('a',942),('a',943),('a',944),('a',945),('a',946),('a',947),('a',948),('a',949),('a',950),('a',951),('a',952),('a',953),('a',954),('a',955),('a',956),('a',957),('a',958),('a',959),('a',960),('a',961),('a',962),('a',963),('a',964),('a',965),('a',966),('a',967),('a',968),('a',969),('a',970),('a',971),('a',972),('a',973),('a',974),('a',975),('a',976),('a',977),('a',978),('a',979),('a',980),('a',981),('a',982),('a',983),('a',984),('a',985),('a',986),('a',987),('a',988),('a',989),('a',990),('a',991),('a',992),('a',993),('a',994),('a',995),('a',996),('a',997),('a',998),('a',999),('a',1000),('a',1001),('a',1002),('a',1003),('a',1004),('a',1005);
/*!40000 ALTER TABLE `test` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
dellis23 commented 10 years ago

Also note I'm using 1.2.5.

methane commented 10 years ago

MySQLdb1 uses Python/C API. PyPy doesn't so good at Python/C API. I recommend you to use PyMySQL or MySQL Connector/Python.

dellis23 commented 10 years ago

@methane Yeah, that's what I ended up going with. Still, this is listed as "compatible".