Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extension hangs on FreeBSD #34

Closed
GoogleCodeExporter opened this issue Mar 14, 2015 · 15 comments
Closed

Extension hangs on FreeBSD #34

GoogleCodeExporter opened this issue Mar 14, 2015 · 15 comments

Comments

@GoogleCodeExporter
Copy link

I am using

 - PostgreSQL 9.2 RC1
 - V8 3.13.3.1
 - PL/V8 (from https://code.google.com/p/plv8js/)

As a baseline, I am able to build and run all above as expected on Ubuntu 10.04 
LTS i386.

Now, all of the following give the same behavior: as soon as I create a 
function (or run make installcheck), the PG client will /hang forever/.

Tested:

 - FreeBSD 9 Rel. : i386 and AMD64
 - GCC 4.2.1 (from system) and GCC 4.6.2 (from ports collection)
 - PostgreSQL 9.1.5 and 9.2 RC1

I have run the V8 regression tests for all builds successfully (100% green). So 
the V8 library itself seems to be working. PG for itself I assume is also not 
the problem (I tested 9.1.5 also).

Original issue reported on code.google.com by tobias.o...@gmail.com on 27 Aug 2012 at 4:24

@GoogleCodeExporter
Copy link
Author

Hmm, I don't have FreeBSD... I wish I had some environment to reproduce it...

Original comment by umi.tan...@gmail.com on 5 Sep 2012 at 7:33

@GoogleCodeExporter
Copy link
Author

I can give you temporary shell access to a FreeBSD box .. could you send me 
your public key? => tobias dot oberstein at tavendo dot de
Alternatively, I can prepare a virtual appliance that you can import into 
VirtualBox and run on your desktop.

Original comment by tobias.o...@gmail.com on 5 Sep 2012 at 1:03

@GoogleCodeExporter
Copy link
Author

The same exact thing happens for me:

- FreeBSD 9.0-STABLE (AMD64)
- V8 3.12.10
- PostgreSQL 9.1, 9.2dev, and 9.2 release.
- gcc/g++ v4.2.1
- plv8js 2012-07-19 snapshot

I've ktraced the PostgreSQL child running the query to define the 'to_jsontext' 
function on the home page after plv8 is loaded, if that helps at all.


Original comment by rubym...@gmail.com on 12 Sep 2012 at 9:39

@GoogleCodeExporter
Copy link
Author

[deleted comment]

@GoogleCodeExporter
Copy link
Author

Even such a simple UDF fails in the FreeBSD box.

extern "C" {
#include "postgres.h"
#include "fmgr.h"

PG_MODULE_MAGIC;

PG_FUNCTION_INFO_V1(miniv8);
Datum miniv8(PG_FUNCTION_ARGS);
}

#include "v8.h"

using namespace v8;

Datum
miniv8(PG_FUNCTION_ARGS)
{
    {
        HandleScope scope;

        Handle<ObjectTemplate> obj = ObjectTemplate::New();
    }

    PG_RETURN_BOOL(true);
}

Still I don't understand what is happening.

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 7:49

Attachments:

@GoogleCodeExporter
Copy link
Author

Is this related...?

https://github.com/cowboyd/therubyracer/issues/145

Can you try adding -fPIC in SConstruct and rebuild libv8.so?

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 8:28

@GoogleCodeExporter
Copy link
Author

Ah, never mind.  It's already there.

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 8:32

@GoogleCodeExporter
Copy link
Author

Oh, ok.  You need to build postgresql with -pthread.  Try:
./configure --prefix=$HOME/local CFLAGS='-pthread'

Note: don't forget -O2 in CFLAGS for your production.

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 8:42

@GoogleCodeExporter
Copy link
Author

...and installcheck still fails.

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 8:45

@GoogleCodeExporter
Copy link
Author

Well, no.  I was just messing up the source.  It works fine with -pthread.

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 8:46

@GoogleCodeExporter
Copy link
Author

I'll try with PG build with above option.

FWIW: the FreeBSD port for V8 does this patching:

/usr/ports/lang/v8/files
webmqpgdev# cat patch-SConstruct
--- SConstruct.orig     2012-02-08 09:38:50.000000000 +0800
+++ SConstruct  2012-02-08 09:50:13.000000000 +0800
@@ -115,7 +115,7 @@ LIBRARY_FLAGS = {
       'CPPPATH' : [src_dir, '/usr/local/include'],
       'LIBPATH' : ['/usr/local/lib'],
       'CCFLAGS':      ['-ansi'],
-      'LIBS': ['execinfo']
+      'LIBS': ['pthread', 'execinfo']
     },
     'os:openbsd': {
       'CPPPATH' : [src_dir, '/usr/local/include'],
webmqpgdev# cat patch-gyp_common.py
--- build/gyp/pylib/gyp/common.py.orig  2012-05-14 16:25:53.000000000 +0800
+++ build/gyp/pylib/gyp/common.py       2012-05-14 16:26:03.000000000 +0800
@@ -355,6 +355,8 @@ def GetFlavor(params):
     'sunos5': 'solaris',
     'freebsd7': 'freebsd',
     'freebsd8': 'freebsd',
+    'freebsd9': 'freebsd',
+    'freebsd10': 'freebsd',
   }
   flavor = flavors.get(sys.platform, 'linux')
   return params.get('flavor', flavor)
webmqpgdev#

Original comment by tobias.o...@gmail.com on 14 Sep 2012 at 8:47

@GoogleCodeExporter
Copy link
Author

Cool! I'll try in a moment. On success, I document the steps for building on 
FBSD in detail .. maybe that would be worth a page on the PLV8 wiki?

Original comment by tobias.o...@gmail.com on 14 Sep 2012 at 8:49

@GoogleCodeExporter
Copy link
Author

To be honest, PLV8 wiki page's V8 install instruction is out of date at all.  
I'll work on that soon.

Original comment by umi.tan...@gmail.com on 14 Sep 2012 at 9:08

@GoogleCodeExporter
Copy link
Author

Ok, confirmed that adding "-pthread" during PG build did the trick! Works for 
me now .. thanks alot for helping!

Build PostgreSQL
================

cd ~/build
tar xvjf ../tarballs/postgresql-9.2.0.tar.bz2
cd postgresql-9.2.0
./configure --prefix=$HOME/local CFLAGS='-O2 -pthread'
gmake
gmake install


Build Google V8
===============

cd ~/build
svn checkout http://v8.googlecode.com/svn/trunk/ v8
cd v8
export GYPFLAGS="-D OS=freebsd"
gmake dependencies
gmake native.check -j 4 library=shared strictaliasing=off console=readline
cp ./include/* ~/local/include/
cp ./out/native/lib.target/libv8.so ~/local/lib/
cp ./out/native/d8 ~/local/bin/


Build PLV8
==========

cd ~/build
git clone https://code.google.com/p/plv8js/
cd plv8js

Edit `Makefile` for

    V8DIR = ${HOME}/local

gmake
gmake install


Test PLV8
=========

To test, open a first shell and do

initdb -D $HOME/pgdata
postgres -D $HOME/pgdata
..

and in a 2nd shell do:

gmake installcheck

If you run PG on non-standard port (or have multiple PGs running),
adjust the Makefile, i.e.

REGRESS = --port 5433 --host 127.0.0.1 init-extension plv8 inline json 
startup_pre startup varparam

Original comment by tobias.o...@gmail.com on 14 Sep 2012 at 9:44

@GoogleCodeExporter
Copy link
Author

Updated a little of Wiki.

Original comment by umi.tan...@gmail.com on 19 Sep 2012 at 4:43

  • Changed state: Fixed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant