reeze/php-leveldb

make test faild in FreeBSD8.2

Closed this issue · 6 comments

php是不是必须要thread safe才能使用该扩展?

make test 通不过,而且正常使用的时候循环读写db多次就会将php挂起,没仔细研究,可能跟线程间的"锁"有关

不用thread safe也可以的,你说的挂起是崩溃了还是无法提供服务了?
你是在webserver环境还是命令行下?

我回家装个bsd试试吧,你试过其他操作系统么?

Reeze
Sent with sparrow

在 2012年11月8日星期四,16:08,rchunping 写道:

php是不是必须要thread safe才能使用该扩展?
make test 通不过,而且正常使用的时候循环读写db多次就会将php挂起,没仔细研究,可能跟线程间的"锁"有关


Reply to this email directly or view it on GitHub (#4).

我这边是 FreeBSD 8.2-STABLE amd64
ports安装的php
php -v
PHP 5.3.10 with Suhosin-Patch (cli) (built: Feb 20 2012 11:57:38)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
with Xdebug v2.1.1, Copyright (c) 2002-2011, by Derick Rethans

没有编译成线程安全

ports里面的是leveldb-1.5 我试过leveldb-1.7 情况一样

cli和webserver(php编译成apache2的模块)下运行都有类似情况

挂起是连续get/put的时候php进程停顿在某处,cpu占用没有异常,说明不是死循环,可能在等待某系统调用

make test的时候就可以重现

[xxxxxxxx ~/pecl/leveldb-0.1.1]$ make test

Build complete.
Don't forget to run 'make test'.

PHP : /usr/local/bin/php
PHP_SAPI : cli
PHP_VERSION : 5.3.10
ZEND_VERSION: 2.3.0
PHP_OS : FreeBSD - FreeBSD xxxxxx 8.2-STABLE FreeBSD 8.2-STABLE #0: Sun Sep 25 13:36:14 CST 2011 root@xxxxxx:/usr/obj/usr/src/sys/GENERIC amd64
INI actual : /usr/home/me/pecl/leveldb-0.1.1/tmp-php.ini
More .INIs :
CWD : /usr/home/me/pecl/leveldb-0.1.1
Extra dirs :

VALGRIND : Not used

TIME START 2012-11-08 21:49:49

PASS leveldb - basic: get(), set(), put(), delete() [tests/001-basic.phpt]
PASS leveldb - db management [tests/002-db-management.phpt]
PASS leveldb - open base dir [tests/003-openbasedir.phpt]
PASS leveldb - write batch [tests/004-write-batch.phpt]
PASS leveldb - iterate thought db [tests/005-iterator.phpt]
TEST 6/18 [tests/006-iterator-foreach.phpt]

<<<<<<<一直停在这里,无法继续完成test

我本来是想装这个然后给gearman写个worker,一直没法搞定,目前用node.js和 node-gearman node-levelup 代替。

ldd leveldb.so 看到是连接了libthr线程库的,而我的php不是线程安全的,所以猜测可能是线程问题导致的。

我装了个freebsd 9,在开启线程安全和没开下测试都没有复现。

你试下修改测试文件 tests/006-iterator-foreach.phpt 在php那段代码的各处加上输出信息,看下到底是卡在那个地方了。

同样的问题,在freebsd 8.2

tests/006-iterator-foreach.phpt 执行几次之后,
卡在这里:$db = new LevelDB($leveldb_path);

没有办法读取磁盘上的文件,不能初始化levelDB

好,我去装个8.2 试下,可能和os版本有关

reeze | reeze.cn

在 2012年11月26日星期一,下午9:56,wolfchen 写道:

同样的问题,在freebsd 8.2
tests/006-iterator-foreach.phpt 执行几次之后,
卡在这里:$db = new LevelDB($leveldb_path);
没有办法读取磁盘上的文件,不能初始化levelDB


Reply to this email directly or view it on GitHub (#4 (comment)).

辛苦reeze了

我目前用 phpiredis + redis-storage(一个把leveldb和redis结合的东西) 代替了。