CEPH filesystem development
 help / color / mirror / Atom feed
* Get rados to build, and run, with the current Cython version.
@ 2016-02-27 12:35 Willem Jan Withagen
  2016-02-29 14:10 ` John Spray
  0 siblings, 1 reply; 2+ messages in thread
From: Willem Jan Withagen @ 2016-02-27 12:35 UTC (permalink / raw)
  To: Ceph Development


I'm running into a rather blocking issue with testing on FreeBSD due
to the cythonifying of rados. (would have prefered an option to not use
cython... )

One of the first tests after all unittests is:
	ceph-disk/run-tox.sh

It runs at the end:  bash -x tests/ceph-disk.sh

Which tries to execute:
DEBUG:ceph_disk.main:Cluster uuid is cddc1351-dcf1-11e5-8cd4-1c6f6582ec12
INFO:ceph_disk.main:Running command: ../ceph-osd --cluster=ceph
--show-config-value=fsid
DEBUG:ceph_disk.main:Cluster name is ceph
DEBUG:ceph_disk.main:OSD uuid is ceac49dd-dcf1-11e5-8cd4-1c6f6582ec12
DEBUG:ceph_disk.main:Allocating OSD id...
INFO:ceph_disk.main:Running command: ../ceph --cluster ceph --name
client.bootstrap-osd --keyring test-ceph-disk/bootstrap-osd/ceph.
keyring osd create --concise ceac49dd-dcf1-11e5-8cd4-1c6f6582ec12
Traceback (most recent call last):
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/.tox/py27/bin/ceph-disk",
line 9, in <module>
    load_entry_point('ceph-disk', 'console_scripts', 'ceph-disk')()
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
4601, in run
    main(sys.argv[1:])
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
4553, in main
    args.func(args)
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
3061, in main_activate
    init=args.mark_init,
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
2882, in activate_dir
    (osd_id, cluster) = activate(path, activate_key_template, init)
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
2974, in activate
    keyring=keyring,
  File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
925, in allocate_osd_id
    raise Error('ceph osd create failed', e, e.output)
Error: Error: ceph osd create failed: Command '../ceph' returned
non-zero exit status 1: *** DEVELOPER MODE: setting PATH, PYTHONPAT
H and LD_LIBRARY_PATH ***
Traceback (most recent call last):
  File "../ceph", line 108, in <module>
    import rados
  File "rados.pyx", line 363, in init rados
(/usr/srcs/Ceph/work/ceph/src/build/rados.c:48031)
NameError: name 'errno' is not defined

Now I've changed some code at File "rados.pyx", line 363 because FreeBSD
does not have ENODATA, and in includes/compat.h it is defined to be
ENOATTR with a define. Otherwise it would not even compile.

But the cython translation/compilation does not pick up on this?
ENOATTR is just another define in /usr/include/errno.h so it should find
it. But it does not.

What is the way forward here?

--WjW

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Get rados to build, and run, with the current Cython version.
  2016-02-27 12:35 Get rados to build, and run, with the current Cython version Willem Jan Withagen
@ 2016-02-29 14:10 ` John Spray
  0 siblings, 0 replies; 2+ messages in thread
From: John Spray @ 2016-02-29 14:10 UTC (permalink / raw)
  To: Willem Jan Withagen; +Cc: Ceph Development

On Sat, Feb 27, 2016 at 12:35 PM, Willem Jan Withagen <wjw@digiware.nl> wrote:
>
> I'm running into a rather blocking issue with testing on FreeBSD due
> to the cythonifying of rados. (would have prefered an option to not use
> cython... )
>
> One of the first tests after all unittests is:
>         ceph-disk/run-tox.sh
>
> It runs at the end:  bash -x tests/ceph-disk.sh
>
> Which tries to execute:
> DEBUG:ceph_disk.main:Cluster uuid is cddc1351-dcf1-11e5-8cd4-1c6f6582ec12
> INFO:ceph_disk.main:Running command: ../ceph-osd --cluster=ceph
> --show-config-value=fsid
> DEBUG:ceph_disk.main:Cluster name is ceph
> DEBUG:ceph_disk.main:OSD uuid is ceac49dd-dcf1-11e5-8cd4-1c6f6582ec12
> DEBUG:ceph_disk.main:Allocating OSD id...
> INFO:ceph_disk.main:Running command: ../ceph --cluster ceph --name
> client.bootstrap-osd --keyring test-ceph-disk/bootstrap-osd/ceph.
> keyring osd create --concise ceac49dd-dcf1-11e5-8cd4-1c6f6582ec12
> Traceback (most recent call last):
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/.tox/py27/bin/ceph-disk",
> line 9, in <module>
>     load_entry_point('ceph-disk', 'console_scripts', 'ceph-disk')()
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
> 4601, in run
>     main(sys.argv[1:])
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
> 4553, in main
>     args.func(args)
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
> 3061, in main_activate
>     init=args.mark_init,
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
> 2882, in activate_dir
>     (osd_id, cluster) = activate(path, activate_key_template, init)
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
> 2974, in activate
>     keyring=keyring,
>   File "/usr/srcs/Ceph/work/ceph/src/ceph-disk/ceph_disk/main.py", line
> 925, in allocate_osd_id
>     raise Error('ceph osd create failed', e, e.output)
> Error: Error: ceph osd create failed: Command '../ceph' returned
> non-zero exit status 1: *** DEVELOPER MODE: setting PATH, PYTHONPAT
> H and LD_LIBRARY_PATH ***
> Traceback (most recent call last):
>   File "../ceph", line 108, in <module>
>     import rados
>   File "rados.pyx", line 363, in init rados
> (/usr/srcs/Ceph/work/ceph/src/build/rados.c:48031)
> NameError: name 'errno' is not defined
>
> Now I've changed some code at File "rados.pyx", line 363 because FreeBSD
> does not have ENODATA, and in includes/compat.h it is defined to be
> ENOATTR with a define. Otherwise it would not even compile.
>
> But the cython translation/compilation does not pick up on this?
> ENOATTR is just another define in /usr/include/errno.h so it should find
> it. But it does not.
>
> What is the way forward here?

The ENODATA->ENOATTR mapping from compat.h is going to be completely
invisible to the python/cython code.  Looking at the pre-cython python
code, it appears that that was unconditionally using errno.ENODATA,
which presumably exists in the standard python library even when
compiled on freebsd.  I guess the Cython errno.pyd is silently
dropping ENODATA when it's not found in the header.

You could try using "hasattr(errno, 'ENODATA')" as a conditional check
for whether the NoData python exception should be raised from ENODATA
or ENOATTR.  I don't know if there is a nicer compile time check you
can do for freebsd from the cython code.

All that said, the NameError you're seeing there doesn't seem to be
anything to do with specific error codes, it's as if it's not finding
the errno module at all.  You mention you've modified that file, so it
would probably be useful to link to your branch.

John

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-02-29 14:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-27 12:35 Get rados to build, and run, with the current Cython version Willem Jan Withagen
2016-02-29 14:10 ` John Spray

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox