libvirt/src/vz/vz_sdk.h

96 lines
3.6 KiB
C
Raw Normal View History

/*
* vz_sdk.h: core driver functions for managing
* Parallels Cloud Server hosts
*
* Copyright (C) 2014 Parallels, 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/>.
*
*/
#pragma once
#include <Parallels.h>
#include "vz_utils.h"
int prlsdkInit(void);
void prlsdkDeinit(void);
int prlsdkConnect(struct _vzDriver *driver);
void prlsdkDisconnect(struct _vzDriver *driver);
int
prlsdkLoadDomains(struct _vzDriver *driver);
virDomainObj *
prlsdkAddDomainByUUID(struct _vzDriver *driver, const unsigned char *uuid);
virDomainObj *
prlsdkAddDomainByName(struct _vzDriver *driver, const char *name);
int prlsdkUpdateDomain(struct _vzDriver *driver, virDomainObj *dom);
int prlsdkStart(virDomainObj *dom);
int prlsdkKill(virDomainObj *dom);
int prlsdkStop(virDomainObj *dom);
int prlsdkPause(virDomainObj *dom);
int prlsdkResume(virDomainObj *dom);
int prlsdkSuspend(virDomainObj *dom);
int prlsdkRestart(virDomainObj *dom);
int prlsdkReset(virDomainObj *dom);
int
prlsdkApplyConfig(struct _vzDriver *driver,
virDomainObj *dom,
virDomainDef *new);
int prlsdkCreateVm(struct _vzDriver *driver, virDomainDef *def);
int prlsdkCreateCt(virConnectPtr conn, virDomainDef *def);
int
prlsdkUnregisterDomain(struct _vzDriver *driver, virDomainObj *dom, unsigned int flags);
int
prlsdkDomainManagedSaveRemove(virDomainObj *dom);
int
prlsdkAttachDevice(struct _vzDriver *driver, virDomainObj *dom, virDomainDeviceDef *dev);
int
prlsdkDetachDevice(struct _vzDriver *driver, virDomainObj *dom, virDomainDeviceDef *dev);
parallels: add block device statistics to driver Statistics provided through PCS SDK. As we have only async interface in SDK we need to be subscribed to statistics in order to get it. Trivial solution on every stat request to subscribe, wait event and then unsubscribe will lead to significant delays in case of a number of successive requests, as the event will be delivered on next PCS server notify cycle. On the other hand we don't want to keep unnesessary subscribtion. So we take an hibrid solution to subcsribe on first request and then keep a subscription while requests are active. We populate cache of statistics on subscribtion events and use this cache to serve libvirts requests. * Cache details. Cache is just handle to last arrived event, we call this cache as if this handle is valid it is used to serve synchronous statistics requests. We use number of successive events count to detect that user lost interest to statistics. We reset this count to 0 on every request. If more than PARALLELS_STATISTICS_DROP_COUNT successive events arrive we unsubscribe. Special value of -1 of this counter is used to differentiate between subscribed/unsubscribed state to protect from delayed events. Values of PARALLELS_STATISTICS_DROP_COUNT and PARALLELS_STATISTICS_TIMEOUT are just drop-ins, choosen without special consideration. * Thread safety issues Use parallelsDomObjFromDomainRef in parallelsDomainBlockStats as we could wait on domain lock down on stack in prlsdkGetStatsParam and if we won't keep reference we could get dangling pointer on return from wait. Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@parallels.com>
2015-06-09 07:35:53 +00:00
int
prlsdkUpdateDevice(struct _vzDriver *driver, virDomainObj *dom, virDomainDeviceDef *dev);
int
prlsdkGetBlockStats(PRL_HANDLE sdkstats, virDomainDiskDef *disk, virDomainBlockStatsPtr stats, bool isCt);
int
prlsdkGetNetStats(PRL_HANDLE sdkstas, PRL_HANDLE sdkdom, const char *path, virDomainInterfaceStatsPtr stats);
int
prlsdkGetVcpuStats(PRL_HANDLE sdkstas, int idx, unsigned long long *time);
int
prlsdkGetMemoryStats(PRL_HANDLE sdkstas, virDomainMemoryStatPtr stats, unsigned int nr_stats);
/* memsize is in MiB */
int prlsdkSetMemsize(virDomainObj *dom, unsigned int memsize);
int prlsdkSetCpuCount(virDomainObj *dom, unsigned int count);
int
prlsdkDomainSetUserPassword(virDomainObj *dom,
const char *user,
const char *password);
virDomainSnapshotObjList *prlsdkLoadSnapshots(virDomainObj *dom);
int prlsdkCreateSnapshot(virDomainObj *dom, const char *description);
int prlsdkDeleteSnapshot(virDomainObj *dom, const char *uuid, bool children);
int prlsdkSwitchToSnapshot(virDomainObj *dom, const char *uuid, bool paused);
int
prlsdkMigrate(virDomainObj *dom,
virURI *uri,
const char unsigned *session_uuid,
const char *dname,
unsigned int flags);
PRL_HANDLE
prlsdkSdkDomainLookupByName(struct _vzDriver *driver, const char *name);
int prlsdkCancelJob(virDomainObj *dom);
int prlsdkResizeImage(virDomainObj *dom, virDomainDiskDef *disk, unsigned long long newsize);