All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Jaburek <jjaburek@redhat.com>
To: ltp@lists.linux.it
Subject: [LTP] [RFC] Getting rid of cleanup parameter
Date: Wed, 11 Nov 2015 17:53:11 +0100	[thread overview]
Message-ID: <56437277.8020901@redhat.com> (raw)
In-Reply-To: <20151111133042.GA26695@rei.lan>

On 11/11/2015 02:30 PM, Cyril Hrubis wrote:
> Hi!
>> Just thinking loud, how this would work:
>>
>> Is the scope of cleanup set with tst_set_cleanup() going to be per process?
>> For example: If I call tst_set_cleanup() and then fork couple children,
>> will they automatically ignore cleanup function set in parent?
> 
> It has to be per process, since othewise we would have the callback
> called twice problem again. I.e. the callback set in test setup() would
> be executed only if tst_* call that caused exit was called from the same
> process it has been set up.
> 
>> Can I use tst_set_cleanup() in child process to setup child-specific
>> cleanup function?
> 
> Currently I would do it so that only the main test process can setup the
> callback in order to make it simpler. Since so far I haven't found a
> situation where the parent process cannot easily cleanup after it's
> children and doing cleanup once decreases the possibility of races in
> concurently executed cleanups. Imaginge 100 children cleaning after
> themselves, it's easy to mess up when 100 cleanup functions are running
> at the same time.
> 
> But if you found good usecase we may also allow per-child cleanups.

This may be the case when a test spawns multiple children to do the
testing in parallel, with the children creating shared resources of
unpredictable names/references (so the cleanup cannot be done from
the parent).

I currently cannot think of any such resource,

 * files can use tmpdir, removed recursively from parent
 * spawned processes can be walked from the parent
 * losetup-created devices can have a common prefix
 * IPC shared resources can be pre-created by the parent
   (or be found via a unique key or a dedicated unix user)
 * linux namespaces die automatically with the children
 * ...

The general pattern is that the parent is always able to somehow use
an identifier common for all children or pre-create the resources for
them, collecting a list to be used for cleanup.

However it would be good to keep the use case in mind for the future.

Regarding tst_set_cleanup() - if it hooks the cleanup function into
signal handlers as well, it will need to be called before sigaction
setup in signal-testing tests. Nothing extraordinary, I guess, but
still something to note.

About shell tests - maybe something similar would be useful, for
consistency (same function name) as well as signal handling (trap)
in shells that support it. Again - same signal handling limitations
apply (if test re-defines trap, it may be an issue).

> 
>>> When the cleanup
>>> function was set with this interface the cleanup paramter for all
>>> functions would be ignored (we may create static inline wrappers that
>>> sets it to NULL to be used from new code).
>>
>> And perhaps trigger a warning/TBROK if user tries to pass non-NULL
>> value while he's using the new tst_set_cleanup() approach.
> 
> Yep.
> 


  reply	other threads:[~2015-11-11 16:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-10 14:14 [LTP] [RFC] Getting rid of cleanup parameter Cyril Hrubis
2015-11-11 10:20 ` Jan Stancek
2015-11-11 13:30   ` Cyril Hrubis
2015-11-11 16:53     ` Jiri Jaburek [this message]
2015-11-11 18:45       ` Cyril Hrubis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56437277.8020901@redhat.com \
    --to=jjaburek@redhat.com \
    --cc=ltp@lists.linux.it \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.