mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 17:34:18 +03:00
Cache the presence of machine1 service
After the system has been booted, it should not change. Cache the return value of virSystemdHasMachined. Allow starting and terminating machines with just one DBus call, instead of three, reducing the chance of the call timing out. Also introduce a small function for resetting the cache to be used in tests.
This commit is contained in:
parent
27cdbcb9c2
commit
f10bd740e1
@ -2567,6 +2567,7 @@ virSystemdCanHybridSleep;
|
||||
virSystemdCanSuspend;
|
||||
virSystemdCreateMachine;
|
||||
virSystemdGetMachineNameByPID;
|
||||
virSystemdHasMachinedResetCachedValue;
|
||||
virSystemdMakeMachineName;
|
||||
virSystemdMakeScopeName;
|
||||
virSystemdMakeSliceName;
|
||||
|
@ -26,6 +26,9 @@
|
||||
# include <sys/un.h>
|
||||
#endif
|
||||
|
||||
#define __VIR_SYSTEMD_PRIV_H_ALLOW__ 1
|
||||
#include "virsystemdpriv.h"
|
||||
|
||||
#include "virsystemd.h"
|
||||
#include "viratomic.h"
|
||||
#include "virbuffer.h"
|
||||
@ -182,6 +185,15 @@ virSystemdMakeMachineName(const char *drivername,
|
||||
return machinename;
|
||||
}
|
||||
|
||||
static int virSystemdHasMachinedCachedValue = -1;
|
||||
|
||||
/* Reset the cache from tests for testing the underlying dbus calls
|
||||
* as well */
|
||||
void virSystemdHasMachinedResetCachedValue(void)
|
||||
{
|
||||
virSystemdHasMachinedCachedValue = -1;
|
||||
}
|
||||
|
||||
/* -2 = machine1 is not supported on this machine
|
||||
* -1 = error
|
||||
* 0 = machine1 is available
|
||||
@ -190,10 +202,22 @@ static int
|
||||
virSystemdHasMachined(void)
|
||||
{
|
||||
int ret;
|
||||
if ((ret = virDBusIsServiceEnabled("org.freedesktop.machine1")) < 0)
|
||||
return ret;
|
||||
int val;
|
||||
|
||||
return virDBusIsServiceRegistered("org.freedesktop.systemd1");
|
||||
val = virAtomicIntGet(&virSystemdHasMachinedCachedValue);
|
||||
if (val != -1)
|
||||
return val;
|
||||
|
||||
if ((ret = virDBusIsServiceEnabled("org.freedesktop.machine1")) < 0) {
|
||||
if (ret == -2)
|
||||
virAtomicIntSet(&virSystemdHasMachinedCachedValue, -2);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if ((ret = virDBusIsServiceRegistered("org.freedesktop.systemd1")) == -1)
|
||||
return ret;
|
||||
virAtomicIntSet(&virSystemdHasMachinedCachedValue, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
33
src/util/virsystemdpriv.h
Normal file
33
src/util/virsystemdpriv.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* virsystemdpriv.h: Functions for testing virSystemd APIs
|
||||
*
|
||||
* Copyright (C) 2016 Red Hat, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library. If not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __VIR_SYSTEMD_PRIV_H_ALLOW__
|
||||
# error "virsystemdpriv.h may only be included by virsystemd.c or test suites"
|
||||
#endif
|
||||
|
||||
#ifndef __VIR_SYSTEMD_PRIV_H__
|
||||
# define __VIR_SYSTEMD_PRIV_H__
|
||||
|
||||
# include "virsystemd.h"
|
||||
|
||||
void virSystemdHasMachinedResetCachedValue(void);
|
||||
|
||||
#endif /* __VIR_SYSTEMD_PRIV_H__ */
|
@ -27,6 +27,9 @@
|
||||
# include <stdlib.h>
|
||||
# include <dbus/dbus.h>
|
||||
|
||||
# define __VIR_SYSTEMD_PRIV_H_ALLOW__ 1
|
||||
# include "virsystemdpriv.h"
|
||||
|
||||
# include "virsystemd.h"
|
||||
# include "virdbus.h"
|
||||
# include "virlog.h"
|
||||
@ -522,6 +525,7 @@ mymain(void)
|
||||
do { \
|
||||
if (virTestRun(_name, func, NULL) < 0) \
|
||||
ret = -1; \
|
||||
virSystemdHasMachinedResetCachedValue(); \
|
||||
} while (0)
|
||||
|
||||
DO_TEST("Test create container ", testCreateContainer);
|
||||
|
Loading…
Reference in New Issue
Block a user