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结合的东西) 代替了。