Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge master to feature/easier-pool-join #6236

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
109 commits
Select commit Hold shift + click to select a range
3476a22
Simple test for periodic scheduler
freddy77 Nov 28, 2024
6249261
Limit mutex contention in add_to_queue
freddy77 Dec 6, 2024
f86c076
Compare correctly Mtime.t
freddy77 Dec 6, 2024
2950dd9
Protect queue with mutex in remove_from_queue
freddy77 Dec 6, 2024
529eeaa
Remove signal parameter from add_to_queue
freddy77 Dec 6, 2024
2c192c9
Fix multiple issues in periodic scheduler
freddy77 Nov 26, 2024
935c84f
Add test for removing periodic event in periodic scheduler
freddy77 Nov 28, 2024
60e1257
Add test for handling event if queue was empty in periodic scheduler
freddy77 Nov 28, 2024
88dd4d9
Add a test to check the loop is woken up adding a new event
freddy77 Dec 9, 2024
3e70a6d
Improve the scan comparison logic
Vincent-lau Dec 10, 2024
9ad4626
CA-402901: Update leaked dp to Sr
changlei-li Dec 10, 2024
8941c9d
Test and improve Xapi periodic scheduler (#6155)
psafont Dec 11, 2024
309e7f6
CA-402901: Update leaked dp to Sr (#6169)
robhoes Dec 11, 2024
4f3f08f
Improve the scan comparison logic (#6168)
Vincent-lau Dec 11, 2024
017027b
Added manually messages that are not autogenerated.
kc284 Nov 29, 2024
039f61f
Docs tidy up:
kc284 Nov 29, 2024
785f1b9
Add VM_metrics to metadata export
robhoes Jul 7, 2023
077e8d1
Add VM_metrics to metadata import
robhoes Jul 13, 2023
33b6315
Cross-pool live migration: move CPU check to the target host
robhoes Jul 7, 2023
b0f93fc
CA-380580: cross-pool migration: no CPU checks for halted VMs
robhoes Jul 27, 2023
a540ac8
CA-403633: Keep vPCI devices in the same order
psafont Dec 12, 2024
9aa2baa
CA-403633: Keep vPCI devices in the same order (#6176)
psafont Dec 12, 2024
88534a0
CA-380580: cross-pool migration - no CPU checks for halted VMs, move …
last-genius Dec 13, 2024
0472024
Docs changes; minor C# SDK enhancement. (#6174)
robhoes Dec 13, 2024
6f6cd81
CA-403767: verifyPeer can't use root CA for appliance cert check
minglumlu Dec 16, 2024
36b9e1a
Simplify event generation predicate in Xapi_event
contificate Dec 16, 2024
ea6f355
Update comment to include implicit invariant
contificate Dec 16, 2024
a4e55f5
IH-747 - xapi/import: Don't lie in VDI import logs
last-genius Dec 13, 2024
cfc6594
IH-747 - database: Add an internal get_by_uuid_opt method
last-genius Dec 13, 2024
81c2a6a
IH-747 - xapi/import: Use get_by_uuid_opt to not log backtraces when …
last-genius Dec 13, 2024
8550769
CA-403767: verifyPeer can't use root CA for appliance cert check (#6187)
robhoes Dec 17, 2024
c8af62d
Simplify Eventgen
contificate Dec 16, 2024
cc50840
Add eventgen.mli
contificate Dec 16, 2024
4f87195
Hide that get_records are stored in a Hashtbl
contificate Dec 16, 2024
ed2e502
Document eventgen.mli
contificate Dec 17, 2024
d622dd8
Precompute symmetric closure table
contificate Dec 17, 2024
db80786
IH-747 - Reduce pollution in migration logs (#6186)
last-genius Dec 18, 2024
d08c6cb
CA-402921: Relax VIF constraint for PVS proxy
robhoes Dec 9, 2024
2f2ee29
CA-402921: Update PVS-proxy tests
robhoes Dec 11, 2024
14406ba
CA-402921: Restrict VIF.create
robhoes Dec 18, 2024
8192792
CA-402921: Add some unit tests for Xapi_vif_helpers
robhoes Dec 18, 2024
e861cb6
CA-402921: Relax VIF constraint for PVS proxy (#6189)
robhoes Dec 19, 2024
e8bde26
CA-403422: lengthen the timeout for xenopsd's serialized tasks
psafont Dec 18, 2024
a899232
xenopsd: remove unused subtask parameter
psafont Dec 19, 2024
ac2255b
XSI-1773 improve logging if service file unexpectedly exists
Dec 19, 2024
4cbacdb
Simplify Eventgen (#6188)
robhoes Dec 19, 2024
90b0faf
XSI-1773 improve logging if service file unexpectedly exists (#6190)
robhoes Dec 19, 2024
3d394e0
XSI-1773 clean up swtpm service files
Dec 20, 2024
9eeb1f3
XSI-1773 clean up swtpm service files (#6193)
lindig Dec 20, 2024
4394f84
CA-404020: Do not fail when removing a non-existing datasource
psafont Dec 23, 2024
74fe427
rrd/lib: remove outdated functions from utils
psafont Dec 23, 2024
e4e20ad
rrdd: add more comments about its datastructures
psafont Dec 23, 2024
87013f1
CA-364194: use timespans for script timeouts
psafont Oct 12, 2022
0e8cc20
CA-404062: Wrongly restart xapi when receiving HTTP errors
minglumlu Dec 27, 2024
9a44916
CA-404062: Reformat
minglumlu Jan 2, 2025
2fafeb7
CP-51895: Drop FCoE support when fcoe_driver does not exists
liulinC Dec 31, 2024
e3f11da
Report memory available as Kib
gthvn1 Jan 2, 2025
6cf6b77
CA-403422: lengthen the timeout for xenopsd's serialized tasks (#6192)
psafont Jan 2, 2025
0f1f45c
Report memory available as Kib (#6204)
psafont Jan 2, 2025
5f6b500
CA-404062: Wrongly restart xapi when receiving HTTP errors (#6201)
minglumlu Jan 2, 2025
75f0b41
xenopsd: Avoid calling to_string every time
freddy77 Jan 2, 2025
34b5b63
xenopsd: Avoid calling to_string every time (#6206)
psafont Jan 2, 2025
c264219
CA-404020: Do not fail when removing a non-existing datasource (#6199)
psafont Jan 3, 2025
a2e04f9
CA-403620: Drop the usage of fuser in stunnel client proxy
minglumlu Dec 17, 2024
e7f2b70
CA-403620: Make the stunnel proxy local port configurable
minglumlu Dec 26, 2024
b245449
gencert: name the pem parsers
psafont Jan 2, 2025
2d84622
CA-404236, gencert: when parsing pems, ignore data between key and ce…
psafont Jan 2, 2025
71c87a1
CP-51895: Drop FCoE support when fcoe_driver does not exists
liulinC Jan 6, 2025
9a1a547
CA-404236, gencert: when parsing pems, ignore data between key and ce…
psafont Jan 6, 2025
5428164
CA-403344: Add `db_get_by_uuid_opt` to db_cache*
Vincent-lau Jan 3, 2025
eacc53b
Add unit test to the new `db_get_by_uuid_opt` function
Vincent-lau Jan 3, 2025
c69aec9
Style: Refactor using failwith_fmt
Vincent-lau Jan 6, 2025
769c863
Removed deprecated methods.
kc284 Dec 20, 2024
ad4f3d9
Cmdlet refactoring:
kc284 Dec 20, 2024
fa1bf90
CP-53003: Use JsonRpc v1.0 by default and switch to v2.0 once the API…
kc284 Dec 20, 2024
757079c
CA-403344: Add db_get_by_uuid_opt to db_cache* (#6209)
Vincent-lau Jan 6, 2025
dc565fd
CP-51895: Drop FCoE support when fcoe_driver does not exists (#6202)
liulinC Jan 7, 2025
e68cda7
Use Mtime.Span.to_float_ns instead of Mtime.Span.to_uint64_ns+Int64.…
freddy77 Jan 7, 2025
38a8f98
CA-404013: do not relock the mutex when backing up rrds
psafont Jan 7, 2025
77258a4
database: do not log when a field is dropped when loading from db_xml
psafont Jan 8, 2025
5efa5d0
CA-404013: replace Thread.delay with Delay module
gangj Jan 7, 2025
264ca76
CA-404013: replace Thread.delay with Delay module (#6213)
gangj Jan 8, 2025
5689150
CA-403700 use iso9660 file system for updates
Dec 17, 2024
32b154e
rrd2csv: Accept a trailing comma in metrics names
last-genius Jan 7, 2025
53a081c
rrd2csv: Accept a trailing comma in metrics names (#6214)
last-genius Jan 9, 2025
96f7cd1
Use Mtime.Span.to_float_ns instead of Mtime.Span.to_uint64_ns+Int64.…
lindig Jan 9, 2025
f9b5e52
CA-404013: do not relock the mutex when backing up rrds (#6215)
robhoes Jan 10, 2025
fbaad2b
CA-403620: Drop the usage of fuser in stunnel client proxy (#6197)
minglumlu Jan 13, 2025
8c9b754
SDK fixes including CP-53003 (#6210)
kc284 Jan 13, 2025
02ca33e
CA-404512: Add feature flag to the new clustering interface
Vincent-lau Jan 8, 2025
f2f6d20
CA-404512: Add feature flag to the new clustering interface (#6217)
Vincent-lau Jan 13, 2025
d8ac4d9
CA-403700 use iso9660 file system for updates (#6216)
robhoes Jan 13, 2025
f58d8d3
CA-364194: use timespans for script timeouts (#6200)
robhoes Jan 14, 2025
142137d
Remove unused Unixext.Direct module
robhoes Jan 14, 2025
7552baa
Remove unused Unixext.Direct module (#6224)
robhoes Jan 14, 2025
8992f9d
github: update release for ubuntu 24.04
psafont Jan 15, 2025
706b3b2
github: update release for ubuntu 24.04 (#6231)
last-genius Jan 15, 2025
de7e1eb
github: remove dependency of python wheel's on dune
psafont Jan 15, 2025
325febf
github: remove dependency of python wheel's on dune (#6232)
psafont Jan 15, 2025
aac5802
CA-404640 XSI-1781 accept in PEM key/cert in any order
Jan 14, 2025
609be92
CA-404640 XSI-1781 bring back fail-06.pem
Jan 14, 2025
5b86063
Log proper names for POSIX signals
psafont Jan 14, 2025
c0fbb69
Debug: add pretty-printing function for signals
psafont Jan 14, 2025
b41cfea
CA-404640 XSI-1781 accept in PEM key/cert in any order (#6227)
lindig Jan 16, 2025
0326d27
CA-404597: rrd/lib_test - Verify that RRD handles non-rate data sourc…
last-genius Jan 15, 2025
6c1e7ea
Log proper names for POSIX signals (#6228)
psafont Jan 16, 2025
73ca3cc
CA-404597: rrd - Pass Gauge and Absolute data source values as-is
last-genius Jan 16, 2025
43d01ca
CA-404597 - rrd: Fix incorrect processing of Gauge and Absolute data …
last-genius Jan 16, 2025
9a33546
Merge branch 'master' into private/bengangy/master-to-easy-pool-join
BengangY Jan 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,11 @@ jobs:
python-version: "3.x"

- name: Install build dependencies
run: |
pip install build
sudo apt-get install ocaml dune libfindlib-ocaml-dev libdune-ocaml-dev libcmdliner-ocaml-dev
run: pip install build

- name: Generate python package for XenAPI
run: |
./configure --xapi_version=${{ github.ref_name }}
echo "export XAPI_VERSION=${{ github.ref_name }}" > config.mk
make python
- name: Store python distribution artifacts
Expand Down
38 changes: 19 additions & 19 deletions doc/content/design/coverage/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ revision: 2

We would like to add optional coverage profiling to existing [OCaml]
projects in the context of [XenServer] and [XenAPI]. This article
presents how we do it.
presents how we do it.

Binaries instrumented for coverage profiling in the XenServer project
need to run in an environment where several services act together as
Expand All @@ -21,7 +21,7 @@ isolation.
To build binaries with coverage profiling, do:

./configure --enable-coverage
make
make

Binaries will log coverage data to `/tmp/bisect*.out` from which a
coverage report can be generated in `coverage/`:
Expand All @@ -38,7 +38,7 @@ and logs during execution data to in-memory data structures. Before an
instrumented binary terminates, it writes the logged data to a file.
This data can then be analysed with the `bisect-ppx-report` tool, to
produce a summary of annotated code that highlights what part of a
codebase was executed.
codebase was executed.

[BisectPPX] has several desirable properties:

Expand All @@ -65,13 +65,13 @@ abstracted by OCamlfind (OCaml's library manager) and OCamlbuild

# build it with instrumentation from bisect_ppx
ocamlbuild -use-ocamlfind -pkg bisect_ppx -pkg unix example.native

# execute it - generates files ./bisect*.out
./example.native

# generate report
bisect-ppx-report -I _build -html coverage bisect000*

# view coverage/index.html

Summary:
Expand All @@ -86,7 +86,7 @@ will be instrumented during compilation. Behind the scenes `ocamlfind`
makes sure that the compiler uses a preprocessing step that instruments
the code.

## Signal Handling
## Signal Handling

During execution the code instrumentation leads to the collection of
data. This code registers a function with `at_exit` that writes the data
Expand All @@ -98,7 +98,7 @@ terminated by receiving the `TERM` signal, a signal handler must be
installed:

let stop signal =
printf "caught signal %d\n" signal;
printf "caught signal %a\n" Debug.Pp.signal signal;
exit 0

Sys.set_signal Sys.sigterm (Sys.Signal_handle stop)
Expand Down Expand Up @@ -149,8 +149,8 @@ environment variable. This can happen on the command line:

BISECT_FILE=/tmp/example ./example.native

In the context of XenServer we could do this in startup scripts.
However, we added a bit of code
In the context of XenServer we could do this in startup scripts.
However, we added a bit of code

val Coverage.init: string -> unit

Expand All @@ -176,12 +176,12 @@ Goals for instrumentation are:

* what files are instrumented should be obvious and easy to manage
* instrumentation must be optional, yet easy to activate
* avoid methods that require to keep several files in sync like multiple
* avoid methods that require to keep several files in sync like multiple
`_oasis` files
* avoid separate Git branches for instrumented and non-instrumented
code

In the ideal case, we could introduce a configuration switch
In the ideal case, we could introduce a configuration switch
`./configure --enable-coverage` that would prepare compilation for
coverage instrumentation. While [Oasis] supports the creation of such
switches, they cannot be used to control build dependencies like
Expand All @@ -196,7 +196,7 @@ rules in file `_tags.coverage` that cause files to be instrumented:

leads to the execution of this code during preparation:

coverage: _tags _tags.coverage
coverage: _tags _tags.coverage
test ! -f _tags.orig && mv _tags _tags.orig || true
cat _tags.coverage _tags.orig > _tags

Expand All @@ -207,7 +207,7 @@ could be tweaked to instrument only some files:
<**/*.native>: pkg_bisect_ppx

When `make coverage` is not called, these rules are not active and
hence, code is not instrumented for coverage. We believe that this
hence, code is not instrumented for coverage. We believe that this
solution to control instrumentation meets the goals from above. In
particular, what files are instrumented and when is controlled by very
few lines of declarative code that lives in the main repository of a
Expand All @@ -226,14 +226,14 @@ coverage analysis are:
The `_oasis` file bundles the files under `profiling/` into an internal
library which executables then depend on:

# Support files for profiling
# Support files for profiling
Library profiling
CompiledObject: best
Path: profiling
Install: false
Findlibname: profiling
Modules: Coverage
BuildDepends:
BuildDepends:

Executable set_domain_uuid
CompiledObject: best
Expand All @@ -243,16 +243,16 @@ library which executables then depend on:
MainIs: set_domain_uuid.ml
Install: false
BuildDepends:
xenctrl,
uuidm,
xenctrl,
uuidm,
cmdliner,
profiling # <-- here

The `Makefile` target `coverage` primes the project for a profiling build:

# make coverage - prepares for building with coverage analysis

coverage: _tags _tags.coverage
coverage: _tags _tags.coverage
test ! -f _tags.orig && mv _tags _tags.orig || true
cat _tags.coverage _tags.orig > _tags

Expand Down
148 changes: 77 additions & 71 deletions doc/content/xen-api/basics.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@ title = "XenAPI Basics"
weight = 10
+++

This document contains a description of the Xen Management API an interface for
This document contains a description of the Xen Management API - an interface for
remotely configuring and controlling virtualised guests running on a
Xen-enabled host.

The XenAPI is presented here as a set of Remote Procedure Calls, with a wire
format based upon [XML-RPC](http://xmlrpc.scripting.com).
No specific language bindings are prescribed,
although examples will be given in the python programming language.
The API is presented here as a set of Remote Procedure Calls (RPCs).
There are two supported wire formats, one based upon
[XML-RPC](http://xmlrpc.scripting.com/spec.html)
and one based upon [JSON-RPC](http://www.jsonrpc.org) (v1.0 and v2.0 are both
recognized). No specific language bindings are prescribed, although examples
are given in the Python programming language.

Although we adopt some terminology from object-oriented programming,
future client language bindings may or may not be object oriented.
Expand All @@ -21,98 +23,102 @@ specific values. Objects are persistent and exist on the server-side.
Clients may obtain opaque references to these server-side objects and then
access their fields via get/set RPCs.

For each class we specify a list of fields along with their _types_ and _qualifiers_. A
qualifier is one of:
For each class we specify a list of fields along with their _types_ and
_qualifiers_. A qualifier is one of:

- _RO/runtime_: the field is Read
Only. Furthermore, its value is automatically computed at runtime.
For example: current CPU load and disk IO throughput.
- _RO/constructor_: the field must be manually set
when a new object is created, but is then Read Only for
the duration of the object's life.
For example, the maximum memory addressable by a guest is set
before the guest boots.
- _RW_: the field is Read/Write. For example, the name of a VM.
- _RO/runtime_: the field is Read Only. Furthermore, its value is
automatically computed at runtime. For example, current CPU load and disk IO
throughput.

Types
-----
- _RO/constructor_: the field must be manually set when a new object is
created, but is then Read Only for the duration of the object's life.
For example, the maximum memory addressable by a guest is set
before the guest boots.

- _RW_: the field is Read/Write. For example, the name of a VM.

## Types

The following types are used to specify methods and fields in the API Reference:

- `string`: Text strings.
- `int`: 64-bit integers.
- `float`: IEEE double-precision floating-point numbers.
- `bool`: Boolean.
- `datetime`: Date and timestamp.
- `c ref`: Reference to an object of class `c`.
- `t set`: Arbitrary-length set of values of type `t`.
- `(k → v) map`: Mapping from values of type `k` to values of type `v`.
- `e enum`: Enumeration type with name `e`. Enums are defined in the API Reference together with classes that use them.

Note that there are a number of cases where `ref`s are _doubly
linked_ – e.g. a VM has a field called `VIFs` of type
`VIF ref set`; this field lists
the network interfaces attached to a particular VM. Similarly, the VIF
class has a field called `VM` of type `VM ref` which references the VM to which the interface is connected.
- `string`: Text strings.
- `int`: 64-bit integers.
- `float`: IEEE double-precision floating-point numbers.
- `bool`: Boolean.
- `datetime`: Date and timestamp.
- `c ref`: Reference to an object of class `c`.
- `t set`: Arbitrary-length set of values of type `t`.
- `(k -> v) map`: Mapping from values of type `k` to values of type `v`.
- `e enum`: Enumeration type with name `e`. Enums are defined in the API
reference together with classes that use them.

Note that there are a number of cases where `ref`s are _doubly linked_.
For example, a `VM` has a field called `VIFs` of type `VIF ref set`;
this field lists the network interfaces attached to a particular VM.
Similarly, the `VIF` class has a field called `VM` of type `VM ref`
which references the VM to which the interface is connected.
These two fields are _bound together_, in the sense that
creating a new VIF causes the `VIFs` field of the corresponding
VM object to be updated automatically.

The API reference explicitly lists the fields that are
The API reference lists explicitly the fields that are
bound together in this way. It also contains a diagram that shows
relationships between classes. In this diagram an edge signifies the
existance of a pair of fields that are bound together, using standard
existence of a pair of fields that are bound together, using standard
crows-foot notation to signify the type of relationship (e.g.
one-many, many-many).

RPCs associated with fields
---------------------------
## RPCs associated with fields

Each field, `f`, has an RPC accessor associated with it that returns `f`'s value:

- `get_f (r)`: takes a `ref`, `r` that refers to an object and returns the value
of `f`.

Each field, `f`, with qualifier _RW_ and whose outermost type is `set` has the
following additional RPCs associated with it:

Each field, `f`, has an RPC accessor associated with it
that returns `f`'s value:
- `add_f(r, v)`: adds a new element `v` to the set.
Note that sets cannot contain duplicate values, hence this operation has
no action in the case that `v` is already in the set.

- `get_f (r)`: Takes a `ref`, `r`, that refers to an object and returns the value of `f`.
- `remove_f(r, v)`: removes element `v` from the set.

Each field, `f`, with attribute `RW` and whose outermost type is `set` has the following
additional RPCs associated with it:
Each field, `f`, with qualifier _RW_ and whose outermost type is `map` has the
following additional RPCs associated with it:

- `add_f (r, v)`: Adds a new element `v` to the set. Since sets cannot contain duplicate values this operation has no action in the case
that `v` was already in the set.
- `add_to_f(r, k, v)`: adds new pair `k -> v` to the mapping stored in `f` in
object `r`. Attempting to add a new pair for duplicate key, `k`, fails with a
`MAP_DUPLICATE_KEY` error.

- `remove_f (r, v)`: Removes element `v` from the set.
- `remove_from_f(r, k)`: removes the pair with key `k`
from the mapping stored in `f` in object `r`.

Each field, `f`, with attribute RW and whose outermost type is `map` has the following
additional RPCs associated with it:
Each field whose outermost type is neither `set` nor `map`, but whose
qualifier is _RW_ has an RPC accessor associated with it that sets its value:

- `add_to_f (r, k, v)`: Adds new pair `(k → v)` to the mapping stored in `f` in object `r`. Attempting to add a new pair for duplicate
key, `k`, fails with an `MAP_DUPLICATE_KEY` error.
- `remove_from_f (r, k)`: Removes the pair with key `k` from the mapping stored in `f` in object `r`.
- `set_f(r, v)`: sets the field `f` on object `r` to value `v`.

Each field whose outermost type is neither `set` nor `map`,
but whose attribute is RW has an RPC accessor associated with it
that sets its value:
## RPCs associated with classes

- `set_f (r, v)`: Sets field `f` on object `r` to value `v`.
- Most classes have a _constructor_ RPC named `create` that
takes as parameters all fields marked _RW_ and _RO/constructor_. The result
of this RPC is that a new _persistent_ object is created on the server-side
with the specified field values.

RPCs associated with classes
----------------------------
- Each class has a `get_by_uuid(uuid)` RPC that returns the object
of that class that has the specified `uuid`.

- Most classes have a _constructor_ RPC named `create` that
takes as parameters all fields marked RW and
RO/constructor. The result of this RPC is that a new _persistent_ object is
created on the server-side with the specified field values.
- Each class has a `get_by_uuid (uuid)` RPC that returns the object
of that class that has the specified UUID.
- Each class that has a `name_label` field has a `get_by_name_label (name_label)` RPC that returns a set of objects of that
class that have the specified `name_label`.
- Most classes have a `destroy (r)` RPC that explicitly deletes the persistent object specified by `r` from the system. This is a
non-cascading delete – if the object being removed is referenced by another
object then the `destroy` call will fail.
- Each class that has a `name_label` field has a
`get_by_name_label(name_label)` RPC that returns a set of objects of that
class that have the specified `name_label`.

Additional RPCs
---------------
- Most classes have a `destroy(r)` RPC that explicitly deletes
the persistent object specified by `r` from the system. This is a
non-cascading delete - if the object being removed is referenced by another
object then the `destroy` call will fail.

As well as the RPCs enumerated above, most classes have additional RPCs
associated with them. For example, the VM class has RPCs for cloning,
Apart from the RPCs enumerated above, most classes have additional RPCs
associated with them. For example, the `VM` class has RPCs for cloning,
suspending, starting etc. Such additional RPCs are described explicitly
in the API reference.
Loading
Loading