All of lore.kernel.org
 help / color / mirror / Atom feed
* [linux-lvm] api recommandation (example_cmdlib.c doesnt work properly)?
@ 2018-05-09  6:52 Oliver Rath
  2018-05-09  8:27 ` Zdenek Kabelac
  0 siblings, 1 reply; 2+ messages in thread
From: Oliver Rath @ 2018-05-09  6:52 UTC (permalink / raw)
  To: linux-lvm

[-- Attachment #1: Type: text/plain, Size: 1319 bytes --]

Hi list,

i tried to get some lvm-commands working using example_cmdlib.c
(modified, attached). Unfortunatly the example hangs trying a "lvcreate
--name test --size 12M levg" command:

---------------------- snip ---------------------------------

root@w541:/home/oliver/gits/lvm2/doc# lvremove -f levg/test
  Logical volume "test" successfully removed
root@w541:/home/oliver/gits/lvm2/doc# ./example_cmdlib
WARNING: Sum of all thin volume sizes (870,00 GiB) exceeds the size of
thin pools and the amount of free space in volume group (<6,17 GiB).
WARNING: You have not turned on protection against thin pools running
out of space.
WARNING: Set activation/thin_pool_autoextend_threshold below 100 to
trigger automatic extension of thin pools before they get full.

---------------------- snap ---------------------------------

Here the only way to continue is to killall -9 example_cmdlib. If you
like, i can send a strace from the run (300kb). The program was built with

gcc example_cmdlib.c -o example_cmdlib  -llvm2cmd

Whats wrong here? Ist there a better api for communicating from other
programs?

Imho the python support is deprecated, lvm2app is deprecated, dbus-api
is limited@the moment (right? Didnt find documentation for it), so
the only way seems liblvm or call explicit the lvm-tools.

Tfh!

Oliver


[-- Attachment #2: example_cmdlib.c --]
[-- Type: text/x-csrc, Size: 1148 bytes --]

/*
 * Copyright (C) 2004 Red Hat, Inc. All rights reserved.
 *
 * This file is part of LVM2.
 *
 * This copyrighted material is made available to anyone wishing to use,
 * modify, copy, or redistribute it subject to the terms and conditions
 * of the GNU General Public License v.2.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

#include "lvm2cmd.h"
#include <stdio.h>

/* All output gets passed to this function line-by-line */
void test_log_fn(int level, const char *file, int line,
		 int dm_errno, const char *format)
{
	/* Extract and process output here rather than printing it */

	if (level != 4)
		return;

	printf("%s\n", format);
	return;
}

int main(int argc, char **argv)
{
	void *handle;
	int r;

	lvm2_log_fn(test_log_fn);

	handle = lvm2_init();

	lvm2_log_level(handle, 4);
	// r = lvm2_run(handle, "vgs --reportformat=json levg");
	r = lvm2_run(handle, "lvcreate --name test --size 12M levg");

	/* More commands here */

	lvm2_exit(handle);
	return r;
}


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

* Re: [linux-lvm] api recommandation (example_cmdlib.c doesnt work properly)?
  2018-05-09  6:52 [linux-lvm] api recommandation (example_cmdlib.c doesnt work properly)? Oliver Rath
@ 2018-05-09  8:27 ` Zdenek Kabelac
  0 siblings, 0 replies; 2+ messages in thread
From: Zdenek Kabelac @ 2018-05-09  8:27 UTC (permalink / raw)
  To: LVM general discussion and development, Oliver Rath

Dne 9.5.2018 v 08:52 Oliver Rath napsal(a):
> Hi list,
> 
> i tried to get some lvm-commands working using example_cmdlib.c
> (modified, attached). Unfortunatly the example hangs trying a "lvcreate
> --name test --size 12M levg" command:

Hi

Please avoid tweaking code to use  cmdlib - it's  internal library and
lvm2 is highly recommending to always FORK  lvm2 command - instead
of trying to embeded it in your application.

There are numerous memory requirements during certain operation that would be 
pretty bad to be imposed for other users tool.

If you want to 'stream' multiple commands - you could pipe  lvm shell to 
minimize forking, however than error reporting & reaction becomes a bit harder 
to play with.

> 
> Whats wrong here? Ist there a better api for communicating from other
> programs?

It's simply not official API and it's based on internal knowledge and uses 
settings from lvm.conf - these settings are tied to use of lvm command.

> 
> Imho the python support is deprecated, lvm2app is deprecated, dbus-api
> is limited at the moment (right? Didnt find documentation for it), so
> the only way seems liblvm or call explicit the lvm-tools.


dBus API is somewhat 'frozen' as there is no active development on this part,
and would be nice to get someone involved into this more...


Regards


Zdenek

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

end of thread, other threads:[~2018-05-09  8:27 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-09  6:52 [linux-lvm] api recommandation (example_cmdlib.c doesnt work properly)? Oliver Rath
2018-05-09  8:27 ` Zdenek Kabelac

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.