tranquility kafka exception

when i follow docs to use tranquilty to push data from kafka to druid, i got the exception below, what is reason, thx a lot.

bin/tranquility kafka -configFile ./conf-quickstart/tranquility/kafka.json

016-06-07 02:10:51,323 [KafkaConsumer-1] WARN o.a.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

2016-06-07 02:10:51,611 [KafkaConsumer-1] ERROR c.m.tranquility.kafka.KafkaConsumer - Exception:

java.lang.ExceptionInInitializerError: null

at com.metamx.tranquility.druid.DruidBeams$.makeFireDepartment(DruidBeams.scala:422) ~[io.druid.tranquility-core-0.8.1.jar:0.8.1]

at com.metamx.tranquility.druid.DruidBeams$.fromConfigInternal(DruidBeams.scala:297) ~[io.druid.tranquility-core-0.8.1.jar:0.8.1]

at com.metamx.tranquility.druid.DruidBeams$.fromConfig(DruidBeams.scala:202) ~[io.druid.tranquility-core-0.8.1.jar:0.8.1]

at com.metamx.tranquility.kafka.KafkaBeamUtils$.createTranquilizer(KafkaBeamUtils.scala:40) ~[io.druid.tranquility-kafka-0.8.1.jar:0.8.1]

at com.metamx.tranquility.kafka.KafkaBeamUtils.createTranquilizer(KafkaBeamUtils.scala) ~[io.druid.tranquility-kafka-0.8.1.jar:0.8.1]

at com.metamx.tranquility.kafka.writer.TranquilityEventWriter.(TranquilityEventWriter.java:64) ~[io.druid.tranquility-kafka-0.8.1.jar:0.8.1]

at com.metamx.tranquility.kafka.writer.WriterController.createWriter(WriterController.java:171) ~[io.druid.tranquility-kafka-0.8.1.jar:0.8.1]

at com.metamx.tranquility.kafka.writer.WriterController.getWriter(WriterController.java:98) ~[io.druid.tranquility-kafka-0.8.1.jar:0.8.1]

at com.metamx.tranquility.kafka.KafkaConsumer$2.run(KafkaConsumer.java:231) ~[io.druid.tranquility-kafka-0.8.1.jar:0.8.1]

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_51]

at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_51]

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_51]

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_51]

at java.lang.Thread.run(Thread.java:745) [na:1.8.0_51]

Caused by: com.google.inject.CreationException: Unable to create injector, see the following errors:

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataRuleManagerConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataRuleManagerConfig>

for parameter 1 at io.druid.metadata.SQLMetadataRuleManager.(SQLMetadataRuleManager.java:160)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:175) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataRuleManagerConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataRuleManagerConfig>

for parameter 1 at io.druid.metadata.SQLMetadataRuleManagerProvider.(SQLMetadataRuleManagerProvider.java:52)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:180) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataSegmentManagerConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataSegmentManagerConfig>

for parameter 1 at io.druid.metadata.SQLMetadataSegmentManager.(SQLMetadataSegmentManager.java:97)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:165) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataSegmentManagerConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataSegmentManagerConfig>

for parameter 1 at io.druid.metadata.SQLMetadataSegmentManagerProvider.(SQLMetadataSegmentManagerProvider.java:45)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:170) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageConnectorConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageConnectorConfig>

for parameter 0 at io.druid.metadata.storage.mysql.MySQLConnector.(MySQLConnector.java:50)

at io.druid.metadata.storage.mysql.MySQLMetadataStorageModule.configure(MySQLMetadataStorageModule.java:55) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageConnectorConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageConnectorConfig>

for parameter 0 at io.druid.metadata.storage.postgresql.PostgreSQLConnector.(PostgreSQLConnector.java:47)

at io.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule.configure(PostgreSQLMetadataStorageModule.java:56) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 2 at io.druid.metadata.SQLMetadataRuleManager.(SQLMetadataRuleManager.java:160)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:175) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 2 at io.druid.metadata.SQLMetadataRuleManagerProvider.(SQLMetadataRuleManagerProvider.java:52)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:180) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 2 at io.druid.metadata.SQLMetadataSegmentManager.(SQLMetadataSegmentManager.java:97)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:165) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 2 at io.druid.metadata.SQLMetadataSegmentManagerProvider.(SQLMetadataSegmentManagerProvider.java:45)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:170) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 1 at io.druid.metadata.storage.mysql.MySQLConnector.(MySQLConnector.java:50)

at io.druid.metadata.storage.mysql.MySQLMetadataStorageModule.configure(MySQLMetadataStorageModule.java:55) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 1 at io.druid.metadata.storage.postgresql.PostgreSQLConnector.(PostgreSQLConnector.java:47)

at io.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule.configure(PostgreSQLMetadataStorageModule.java:56) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 1 at io.druid.server.audit.SQLAuditManager.(SQLAuditManager.java:67)

while locating io.druid.server.audit.SQLAuditManager

for parameter 5 at io.druid.metadata.SQLMetadataRuleManagerProvider.(SQLMetadataRuleManagerProvider.java:52)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:180) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig> was bound.

while locating com.google.common.base.Supplier<io.druid.metadata.MetadataStorageTablesConfig>

for parameter 0 at io.druid.server.audit.SQLAuditManagerProvider.(SQLAuditManagerProvider.java:50)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:217) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.audit.AuditManager was bound.

while locating io.druid.audit.AuditManager

for parameter 4 at io.druid.metadata.SQLMetadataRuleManager.(SQLMetadataRuleManager.java:160)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:175) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 0 at io.druid.indexer.SQLMetadataStorageUpdaterJobHandler.(SQLMetadataStorageUpdaterJobHandler.java:44)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:205) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 2 at io.druid.metadata.IndexerSQLMetadataStorageCoordinator.(IndexerSQLMetadataStorageCoordinator.java:85)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:200) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 3 at io.druid.metadata.SQLMetadataRuleManager.(SQLMetadataRuleManager.java:160)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:175) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 3 at io.druid.metadata.SQLMetadataRuleManagerProvider.(SQLMetadataRuleManagerProvider.java:52)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:180) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 3 at io.druid.metadata.SQLMetadataSegmentManager.(SQLMetadataSegmentManager.java:97)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:165) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 3 at io.druid.metadata.SQLMetadataSegmentManagerProvider.(SQLMetadataSegmentManagerProvider.java:45)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:170) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 2 at io.druid.metadata.SQLMetadataSegmentPublisher.(SQLMetadataSegmentPublisher.java:53)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:185) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 0 at io.druid.metadata.SQLMetadataStorageActionHandlerFactory.(SQLMetadataStorageActionHandlerFactory.java:37)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:195) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 0 at io.druid.server.audit.SQLAuditManager.(SQLAuditManager.java:67)

while locating io.druid.server.audit.SQLAuditManager

for parameter 5 at io.druid.metadata.SQLMetadataRuleManagerProvider.(SQLMetadataRuleManagerProvider.java:52)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:180) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. No implementation for io.druid.metadata.SQLMetadataConnector was bound.

while locating io.druid.metadata.SQLMetadataConnector

for parameter 1 at io.druid.server.audit.SQLAuditManagerProvider.(SQLAuditManagerProvider.java:50)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:217) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. Could not find a suitable constructor in com.metamx.emitter.service.ServiceEmitter. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.

at com.metamx.emitter.service.ServiceEmitter.class(ServiceEmitter.java:33)

while locating com.metamx.emitter.service.ServiceEmitter

for parameter 2 at io.druid.server.audit.SQLAuditManager.(SQLAuditManager.java:67)

while locating io.druid.server.audit.SQLAuditManager

for parameter 5 at io.druid.metadata.SQLMetadataRuleManagerProvider.(SQLMetadataRuleManagerProvider.java:52)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:180) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. Could not find a suitable constructor in com.metamx.emitter.service.ServiceEmitter. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.

at com.metamx.emitter.service.ServiceEmitter.class(ServiceEmitter.java:33)

while locating com.metamx.emitter.service.ServiceEmitter

for parameter 3 at io.druid.server.audit.SQLAuditManagerProvider.(SQLAuditManagerProvider.java:50)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:217) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. Could not find a suitable constructor in com.metamx.emitter.service.ServiceEmitter. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.

at com.metamx.emitter.service.ServiceEmitter.class(ServiceEmitter.java:33)

while locating com.metamx.emitter.service.ServiceEmitter

for parameter 3 at io.druid.server.namespace.cache.OffHeapNamespaceExtractionCacheManager.(OffHeapNamespaceExtractionCacheManager.java:67)

at io.druid.server.namespace.NamespacedExtractionModule.configure(NamespacedExtractionModule.java:147) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.server.namespace.NamespacedExtractionModule)

  1. A binding to com.google.common.base.Supplier<io.druid.server.audit.SQLAuditManagerConfig> was already configured at io.druid.guice.JsonConfigProvider.bind(JsonConfigProvider.java:131) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule).

at io.druid.guice.JsonConfigProvider.bind(JsonConfigProvider.java:131) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule)

  1. A binding to io.druid.server.audit.SQLAuditManagerConfig was already configured at io.druid.guice.JsonConfigProvider.bind(JsonConfigProvider.java:132) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule).

at io.druid.guice.JsonConfigProvider.bind(JsonConfigProvider.java:132) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.postgresql.PostgreSQLMetadataStorageModule)

  1. Could not find a suitable constructor in io.druid.metadata.MetadataStorageTablesConfig. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.

at io.druid.metadata.MetadataStorageTablesConfig.class(MetadataStorageTablesConfig.java:34)

while locating io.druid.metadata.MetadataStorageTablesConfig

for parameter 1 at io.druid.metadata.SQLMetadataSegmentPublisher.(SQLMetadataSegmentPublisher.java:53)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:185) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. Could not find a suitable constructor in io.druid.metadata.MetadataStorageTablesConfig. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.

at io.druid.metadata.MetadataStorageTablesConfig.class(MetadataStorageTablesConfig.java:34)

while locating io.druid.metadata.MetadataStorageTablesConfig

for parameter 1 at io.druid.metadata.SQLMetadataStorageActionHandlerFactory.(SQLMetadataStorageActionHandlerFactory.java:37)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:195) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

  1. Could not find a suitable constructor in io.druid.metadata.MetadataStorageTablesConfig. Classes must have either one (and only one) constructor annotated with @Inject or a zero-argument constructor that is not private.

at io.druid.metadata.MetadataStorageTablesConfig.class(MetadataStorageTablesConfig.java:34)

while locating io.druid.metadata.MetadataStorageTablesConfig

for parameter 1 at io.druid.metadata.IndexerSQLMetadataStorageCoordinator.(IndexerSQLMetadataStorageCoordinator.java:85)

at io.druid.guice.SQLMetadataStorageDruidModule.configure(SQLMetadataStorageDruidModule.java:200) (via modules: com.google.inject.util.Modules$OverrideModule -> io.druid.metadata.storage.mysql.MySQLMetadataStorageModule)

33 errors

at com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:466) ~[com.google.inject.guice-4.0.jar:na]

at com.google.inject.internal.InternalInjectorCreator.initializeStatically(InternalInjectorCreator.java:155) ~[com.google.inject.guice-4.0.jar:na]

at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:107) ~[com.google.inject.guice-4.0.jar:na]

at com.google.inject.Guice.createInjector(Guice.java:96) ~[com.google.inject.guice-4.0.jar:na]

at com.google.inject.Guice.createInjector(Guice.java:73) ~[com.google.inject.guice-4.0.jar:na]

at com.google.inject.Guice.createInjector(Guice.java:62) ~[com.google.inject.guice-4.0.jar:na]

at com.metamx.tranquility.druid.DruidGuicer.(DruidGuicer.scala:128) ~[io.druid.tranquility-core-0.8.1.jar:0.8.1]

at com.metamx.tranquility.druid.DruidGuicer$.(DruidGuicer.scala:138) ~[io.druid.tranquility-core-0.8.1.jar:0.8.1]

at com.metamx.tranquility.druid.DruidGuicer$.(DruidGuicer.scala) ~[io.druid.tranquility-core-0.8.1.jar:0.8.1]

… 14 common frames omitted

Hi Felix,

I believe the exception is happening because you have the mysql-metadata-storage extension on your classpath and Tranquility apparently does not play well with it. Can you try removing it from your classpath and see if that works?

Hello,

Was there any update on this? I’m currently running into the same issue.

Hey Anthony,

Are you getting the same exception stacktrace? Did you check to make sure Tranquility wasn’t attempting to load the mysql extension?