gfapi.py: support dynamic loading of versioned libraries
Currently gfapi.py only loads libraries by filename ending in ".so". On an installed system without development packages, the <lib>.so filenames are not available. ctypes.util.find_library() can be used to detect the files dynamically. In addition to this, also fixing some minor indention errors and package the library into the Python site-packages path. Python applications and libraries can now access libgfapi through 'from glusterfs import gfapi'. Change-Id: I71e38dabd3ade5dcf24813bf2fc25cda91b571c6 BUG: 1005146 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/5835 Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com>
This commit is contained in:
parent
a66bf67965
commit
c499ef86a2
22
.gitignore
vendored
22
.gitignore
vendored
@ -22,25 +22,27 @@ Makefile
|
||||
stamp-h1
|
||||
|
||||
# Generated files
|
||||
ufo/.tox
|
||||
ufo/test/unit/.coverage
|
||||
api/examples/__init__.py*
|
||||
api/examples/setup.py
|
||||
argp-standalone/libargp.a
|
||||
contrib/uuid/uuid_types.h
|
||||
extras/who-wrote-glusterfs/gitdm
|
||||
extras/init.d/glusterd.plist
|
||||
extras/init.d/glusterd-Debian
|
||||
extras/init.d/glusterd-Redhat
|
||||
extras/init.d/glusterd-SuSE
|
||||
extras/init.d/glusterd.plist
|
||||
extras/ocf/glusterd
|
||||
extras/ocf/volume
|
||||
glusterfs.spec
|
||||
extras/who-wrote-glusterfs/gitdm
|
||||
glusterfs-api.pc
|
||||
libtool
|
||||
xlators/mount/fuse/utils/mount.glusterfs
|
||||
xlators/mount/fuse/utils/mount_glusterfs
|
||||
argp-standalone/libargp.a
|
||||
glusterfs.spec
|
||||
glusterfsd/src/glusterfsd
|
||||
libgfchangelog.pc
|
||||
libglusterfs/src/spec.lex.c
|
||||
libglusterfs/src/y.tab.c
|
||||
libglusterfs/src/y.tab.h
|
||||
libgfchangelog.pc
|
||||
libtool
|
||||
run-tests.sh
|
||||
ufo/.tox
|
||||
ufo/test/unit/.coverage
|
||||
xlators/mount/fuse/utils/mount.glusterfs
|
||||
xlators/mount/fuse/utils/mount_glusterfs
|
||||
|
@ -1 +1 @@
|
||||
SUBDIRS = src
|
||||
SUBDIRS = src examples
|
||||
|
@ -1,4 +1,6 @@
|
||||
noinst_PROGRAMS = glfsxmp
|
||||
EXTRA_PROGRAMS = glfsxmp
|
||||
glfsxmp_SOURCES = glfsxmp.c
|
||||
glfsxmp_CFLAGS = $(GLFS_CFLAGS) -Wall
|
||||
glfsxmp_LDADD = $(GLFS_LIBS)
|
||||
glfsxmp_LDADD = $(GLFS_LIBS)
|
||||
|
||||
EXTRA_DIST = gfapi.py
|
||||
|
@ -1,6 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
from ctypes import *
|
||||
from ctypes.util import find_library
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
@ -8,9 +9,9 @@ import types
|
||||
|
||||
# Looks like ctypes is having trouble with dependencies, so just force them to
|
||||
# load with RTLD_GLOBAL until I figure that out.
|
||||
glfs = CDLL("libglusterfs.so",RTLD_GLOBAL)
|
||||
xdr = CDLL("libgfxdr.so",RTLD_GLOBAL)
|
||||
api = CDLL("libgfapi.so",RTLD_GLOBAL)
|
||||
glfs = CDLL(find_library("glusterfs"),RTLD_GLOBAL)
|
||||
xdr = CDLL(find_library("gfxdr"),RTLD_GLOBAL)
|
||||
api = CDLL(find_library("gfapi"),RTLD_GLOBAL)
|
||||
|
||||
# Wow, the Linux kernel folks really play nasty games with this structure. If
|
||||
# you look at the man page for stat(2) and then at this definition you'll note
|
||||
@ -98,10 +99,12 @@ class File(object):
|
||||
def write (self, data, flags=0):
|
||||
return api.glfs_write(self.fd,data,len(data),flags)
|
||||
|
||||
def fallocate (self, mode, offset, len):
|
||||
return api.glfs_fallocate(self.fd, mode, offset, len)
|
||||
def discard (self, offset, len):
|
||||
return api.glfs_discard(self.fd, offset, len)
|
||||
def fallocate (self, mode, offset, len):
|
||||
return api.glfs_fallocate(self.fd, mode, offset, len)
|
||||
|
||||
def discard (self, offset, len):
|
||||
return api.glfs_discard(self.fd, offset, len)
|
||||
|
||||
|
||||
class Dir(object):
|
||||
|
||||
@ -381,7 +384,7 @@ if __name__ == "__main__":
|
||||
test_setxattr,
|
||||
test_getxattr,
|
||||
test_listxattr,
|
||||
test_fallocate,
|
||||
test_fallocate,
|
||||
)
|
||||
|
||||
ok_to_fail = (
|
||||
|
29
api/examples/setup.py.in
Normal file
29
api/examples/setup.py.in
Normal file
@ -0,0 +1,29 @@
|
||||
from distutils.core import setup
|
||||
|
||||
# generate a __init__.py for the package namespace
|
||||
fo = open('__init__.py', 'w')
|
||||
fo.write('__version__ = "@PACKAGE_VERSION@"\n')
|
||||
fo.close()
|
||||
|
||||
DESC = """GlusterFS is a clustered file-system capable of scaling to
|
||||
several petabytes. It aggregates various storage bricks over Infiniband
|
||||
RDMA or TCP/IP interconnect into one large parallel network file system.
|
||||
GlusterFS is one of the most sophisticated file systems in terms of
|
||||
features and extensibility. It borrows a powerful concept called
|
||||
Translators from GNU Hurd kernel. Much of the code in GlusterFS is in
|
||||
user space and easily manageable.
|
||||
|
||||
This package contains the Python interface to the libgfapi library."""
|
||||
|
||||
setup(
|
||||
name='glusterfs-api',
|
||||
version='@PACKAGE_VERSION@',
|
||||
description='Python client library for the GlusterFS libgfapi',
|
||||
long_description=DESC,
|
||||
author='Gluster Community',
|
||||
author_email='gluster-devel@nongnu.org',
|
||||
license='LGPLv3',
|
||||
url='http://gluster.org/',
|
||||
package_dir={'gluster':''},
|
||||
packages=['gluster']
|
||||
)
|
@ -164,6 +164,8 @@ AC_CONFIG_FILES([Makefile
|
||||
libgfchangelog.pc
|
||||
api/Makefile
|
||||
api/src/Makefile
|
||||
api/examples/Makefile
|
||||
api/examples/setup.py
|
||||
geo-replication/Makefile
|
||||
geo-replication/src/Makefile
|
||||
geo-replication/syncdaemon/Makefile
|
||||
|
@ -63,6 +63,12 @@
|
||||
%global _with_systemd true
|
||||
%endif
|
||||
|
||||
# From https://fedoraproject.org/wiki/Packaging:Python#Macros
|
||||
%if ( 0%{?rhel} && 0%{?rhel} <= 5 )
|
||||
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
|
||||
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
|
||||
%endif
|
||||
|
||||
Summary: Cluster File System
|
||||
%if ( 0%{_for_fedora_koji_builds} )
|
||||
Name: glusterfs
|
||||
@ -315,6 +321,8 @@ This package provides the glusterfs server daemon.
|
||||
Summary: Clustered file-system api library
|
||||
Group: System Environment/Daemons
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
# we provide the Python package/namespace 'gluster'
|
||||
Provides: python-gluster = %{version}-%{release}
|
||||
|
||||
%description api
|
||||
GlusterFS is a clustered file-system capable of scaling to several
|
||||
@ -325,7 +333,7 @@ terms of features and extensibility. It borrows a powerful concept
|
||||
called Translators from GNU Hurd kernel. Much of the code in GlusterFS
|
||||
is in user space and easily manageable.
|
||||
|
||||
This package provides the glusterfs libgfapi library
|
||||
This package provides the glusterfs libgfapi library.
|
||||
|
||||
%if ( 0%{!?_without_ocf:1} )
|
||||
%package resource-agents
|
||||
@ -437,9 +445,17 @@ regression testing of Gluster.
|
||||
|
||||
%{__make} %{?_smp_mflags}
|
||||
|
||||
pushd api/examples
|
||||
FLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build
|
||||
popd
|
||||
|
||||
%install
|
||||
%{__rm} -rf %{buildroot}
|
||||
%{__make} install DESTDIR=%{buildroot}
|
||||
# install the gfapi Python library in /usr/lib/python*/site-packages
|
||||
pushd api/examples
|
||||
%{__python} setup.py install --skip-build --verbose --root %{buildroot}
|
||||
popd
|
||||
# Install include directory
|
||||
%{__mkdir_p} %{buildroot}%{_includedir}/glusterfs
|
||||
%{__install} -p -m 0644 libglusterfs/src/*.h \
|
||||
@ -768,6 +784,7 @@ fi
|
||||
%exclude %{_libdir}/*.so
|
||||
%{_libdir}/libgfapi.*
|
||||
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/mount/api*
|
||||
%{python_sitelib}/*
|
||||
|
||||
%if ( 0%{!?_without_ocf:1} )
|
||||
%files resource-agents
|
||||
@ -858,6 +875,9 @@ if [ $1 -ge 1 ]; then
|
||||
fi
|
||||
|
||||
%changelog
|
||||
* Thu Sep 30 2013 Niels de Vos <ndevos@redhat.com>
|
||||
- Package gfapi.py into the Python site-packages path (#1005146)
|
||||
|
||||
* Tue Sep 17 2013 Harshavardhana <fharshav@redhat.com>
|
||||
- Provide a new package called "glusterfs-regression-tests" for standalone
|
||||
regression testing.
|
||||
|
Loading…
Reference in New Issue
Block a user