Skip to content

Conversation

@rp-
Copy link
Contributor

@rp- rp- commented May 4, 2021

Description

This PR adds a Linstor volume(primary storage) cloudstack driver to cloudstack.
Basic operations as creating/migrating/deleting are working.
Snapshots work with Linstor for most storage pool types, but will fail because cloudstack doesn't seem to support
snapshots of RAW image types(suggestions/ideas are welcome)

It also has a commit to port elastistor jersey-client to version 2.26, so it will not collide with Linstor dependencies (I can put that in a separate PR if needed)

Design doc: https://cwiki.apache.org/confluence/display/CLOUDSTACK/Linstor+storage+plugin

Fixes: #4403

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

Bug Severity

  • BLOCKER
  • Critical
  • Major
  • Minor
  • Trivial

How Has This Been Tested?

4 Node cloudstack cluster (1 Mgmt node, 3 KVM-hosts) with equivalent Linstor setup(1 Controller, 3 Satellites)
Attaching volumes to VM's, migrating volumes between NFS storage and Linstor, creating templates from Linstor volumes

@rohityadavcloud
Copy link
Member

Thanks for the PR @rp- is this ready for review/testing?

@rp-
Copy link
Contributor Author

rp- commented May 4, 2021

Yes, but I'm also open for design discussions as most of the code was done by looking at other storage plugins and trying to understand(debug) how cloudstack handles most things.
So if there are stupid or unnecessary things in my code please don't be a afraid to point me into the right directions.

@rohityadavcloud
Copy link
Member

@rp- a can you at least raise a documentation PR (https://github.com/apache/cloudstack-documentation) to explain how to use this and some details on how this was tested. It would be great if you can share a design document of this feature (for example, https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=158873968 a new storage plugin).

I can help kick regression tests in the meanwhile.
@blueorangutan package

@blueorangutan
Copy link

@rhtyd a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result: ✔️ centos7 ✔️ centos8 ✔️ debian. SL-JID 514

@rohityadavcloud
Copy link
Member

@blueorangutan test

@blueorangutan
Copy link

@rhtyd a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@blueorangutan
Copy link

Trillian test result (tid-604)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 50396 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr4994-t604-kvm-centos7.zip
Intermittent failure detected: /marvin/tests/smoke/test_reset_vm_on_reboot.py
Intermittent failure detected: /marvin/tests/smoke/test_resource_accounting.py
Intermittent failure detected: /marvin/tests/smoke/test_router_dhcphosts.py
Intermittent failure detected: /marvin/tests/smoke/test_routers_network_ops.py
Intermittent failure detected: /marvin/tests/smoke/test_vpc_redundant.py
Intermittent failure detected: /marvin/tests/smoke/test_hostha_kvm.py
Smoke tests completed. 82 look OK, 6 have error(s)
Only failed tests results shown below:

Test Result Time (s) Test File
ContextSuite context=TestResetVmOnReboot>:setup Error 0.00 test_reset_vm_on_reboot.py
ContextSuite context=TestRAMCPUResourceAccounting>:setup Error 0.00 test_resource_accounting.py
test_router_dhcphosts Failure 216.62 test_router_dhcphosts.py
ContextSuite context=TestRouterDHCPHosts>:teardown Error 226.91 test_router_dhcphosts.py
test_01_RVR_Network_FW_PF_SSH_default_routes_egress_true Failure 306.12 test_routers_network_ops.py
test_03_create_redundant_VPC_1tier_2VMs_2IPs_2PF_ACL_reboot_routers Failure 423.77 test_vpc_redundant.py
test_disable_oobm_ha_state_ineligible Error 1511.56 test_hostha_kvm.py

break;
case TEMPLATE:
s_logger.debug("createAsync - creating template");
break;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the driver doesn't create snapshot / template here, better do not handle these cases.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm I wouldn't completely remove the cases, but I added an errMsg, so the callback gets an error answer,
If I would remove the cases, it would return an InvalidDataobject error, which it isn't

@rp-
Copy link
Contributor Author

rp- commented May 5, 2021

@rp- a can you at least raise a documentation PR (https://github.com/apache/cloudstack-documentation) to explain how to use this and some details on how this was tested. It would be great if you can share a design document of this feature (for example, https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=158873968 a new storage plugin).

@rhtyd
I created an account at cwiki.apache.org, but I'm not sure how, or if I can create such a design document there yet?

@rohityadavcloud
Copy link
Member

@rp- can you join our mailing list and drop a line to dev@ http://cloudstack.apache.org/mailing-lists.html I think someone will access will grant you permission to add/edit pages (cc @DaanHoogland - do you have management access or do we ask ASF infra?)

@blueorangutan package

@blueorangutan
Copy link

@rhtyd a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result: ✔️ centos7 ✔️ centos8 ✔️ debian. SL-JID 523

@rp- rp- force-pushed the linstor-volume-plugin branch from 3f7c2d8 to adf3d92 Compare May 7, 2021 09:50

StringJoiner sj = new StringJoiner(System.getProperty("line.separator"));
reader.lines().iterator().forEachRemaining(sj::add);
result = sj.toString();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As result is first used here, you could declare it here too.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I may not even need this whole function if there is a way how I could get the running agent node/host name.
Do you know if there is something like that within the agent code?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did a little search and found a similar usage in Agent.java

final Script command = new Script("hostname", 500, s_logger);
final OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser();
final String result = command.execute(parser);
final String hostname = result == null ? parser.getLine() : addr.toString();

If we go deeper we may find another implementations.

I would suggest you to create an agent utility and implement a method to retrieve the hostname, then use it instead of this whole method.

public boolean disconnectPhysicalDisk(String volumePath, KVMStoragePool pool)
{
s_logger.debug("Linstor: disconnectPhysicalDisk " + pool.getUuid() + ":" + volumePath);
// TODO remove diskless/diskful on node
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be better to register TODO in issues instead of comments in the code.

public boolean disconnectPhysicalDisk(Map<String, String> volumeToDisconnect)
{
s_logger.debug("Linstor: disconnectPhysicalDisk map");
// TODO remove diskless/diskful on node
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be better to register TODO in issues instead of comments in the code.


final QemuImgFile srcFile = new QemuImgFile(sourcePath, sourceFormat);

// create linstor resource
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The method name is clear and auto explanatory, I think we do not need this comment.

Comment on lines 406 to 407
s_logger.error("Failed to copy " + srcFile.getFileName() + " to " +
destFile.getFileName() + " the error was: " + e.getMessage());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can pass the exception as parameter here.

@GutoVeronezi
Copy link
Contributor

@rp- I noticed that you added a lot of comments to the code. Most of they only describe what the next line is doing, e.q.:

//verify if var is true then print it in console
if (var) {
    System.out.println("var is true");
}

These types of comments do not improve debugging and goes against a clean code. However, there are comments that explain a bit of the process, but they could be resolved with an extraction of the code to a method with a corresponding name, javadoc and etc.

Also, there are TODO comments. These requests should be regularized in issues, not in code.

Comments should be a last resort, not the rule. If we take all the comments and sort then in a logic way, we could write a book 😄 .

int timeout)
{
s_logger.info("Linstor: createDiskFromTemplate");
// if source is linstor lvm-thin snapshot we could snapshot and restore from, but do plain copy for now
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rp- I do not know Linstor and do not know why you choose to use this way, but I am wondering why do a plain copy instead of a snapshot...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well it kinda is explained in the comment.
Linstor only supports snapshots from thin-lvm and ZFS backends, but with ZFS there exists a parent-child relation between snapshots. This means it could happen that you wan't to delete an old volume which once was your base of a template, but you can't deleted it, because you have several snapshots from it. (only way is to reverse the parent-child relation)
So from this experience we decided in other plugins to do rather plain volume copies because none of those problems would arise.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rp- ok, understood.

I know from qemu that there is a way to coalesce (merge) or collapse the snapshots (cheatsheet). Could ZFS have anything like that?

@rp-
Copy link
Contributor Author

rp- commented May 11, 2021

I added a basic PR for documentation and also a first version of the design document:
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Linstor+storage+plugin
(sorry I mostly copied the stuff from the ScaleIO plugin)

Btw. do you have some storage test guidelines? Like what basic functions should work and how to test them?
I'm not to familiar with all Cloudstack functionalities, so chances are high that I simply missed some functionality tests.

@sureshanaparti
Copy link
Contributor

I added a basic PR for documentation and also a first version of the design document:
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Linstor+storage+plugin
(sorry I mostly copied the stuff from the ScaleIO plugin)

Btw. do you have some storage test guidelines? Like what basic functions should work and how to test them?
I'm not to familiar with all Cloudstack functionalities, so chances are high that I simply missed some functionality tests.

@rp- Please check if Linstor storage plugin supports all the functionalities mentioned in the cwiki. Can you add some storage references in cwiki ?

@rp-
Copy link
Contributor Author

rp- commented May 14, 2021

@rp- Please check if Linstor storage plugin supports all the functionalities mentioned in the cwiki. Can you add some storage references in cwiki ?

What do you mean with "storage references" ?

@sureshanaparti
Copy link
Contributor

sureshanaparti commented May 17, 2021

@rp- Please check if Linstor storage plugin supports all the functionalities mentioned in the cwiki. Can you add some storage references in cwiki ?

What do you mean with "storage references" ?

@rp- I mean some references, for the docs to know about the Linstor storage. I found one mentioned in cwiki page, and updated the references section.

@rohityadavcloud
Copy link
Member

rohityadavcloud commented May 21, 2021

@rp- here are some links for you for learning/references: cc @Philipp-Reisner
https://github.com/shapeblue/hackerbook (self-learning course)
https://github.com/shapeblue/mbx (appliance based local ACS dev-test/CI/CD env)

Here are some high-level lifecycle operations a typical storage provider can support: (it also depends if which ones of the following operations are even possible/allowed by the storage control plane)

  • Volumes: list (by name, id etc), create, resize, clone, delete, migrate, map/unmap/check-map (to a host), download volume (via secondary storage), get volume/disk statistics/metrics (usage, iops etc)
  • Volume Snapshots: list, take snapshot, revert snapshot, delete (note: this is a single volume/disk), download snapshot (via secondary storage)
  • VM Snapshots: list, take snapshot, revert snapshot, delete (note: this may require a consistency group, i.e. a group of volumes/disks that are attached to a disk with or without memory, i.e. disk-only VM snapshot and disk+ram snapshots)
  • Template: create template from snapshot, create template from volume/disk
  • Storage pool (or Primary storage): list (by name, id etc), get pool statistics/metrics (usage, iops etc), create/add (with label)
  • Migration: can we migrate volumes from one storage pool (Linstore resource pool) to another pool (Linstore resource pool or other types of pool), can we migrate VM across hosts/clusters with/without Linstor storage

Most of the above operations already have a high level CloudStack API, generally the storage provider/plugin implements the backend for these operations. In some cases, if an operation is not allowed (for example, raw-disk snapshots on KVM) you may need to add conditional checks or refactor the CloudStack service layers (API, managers, storage sub-system... which largely defines the policy) and hypervisor sub-system (KVM+storage specific storage data motion strategy, LibvirtStoragePoolDef, handling of config drive, VM/disk migration, KVM specific linstore storage pool manager + storage processor + storage adaptor classes, i.e. they implement how storage/hypervisor specific behaviour are executed).

In general you would setup a dev-test env, and while adding new storage pool in CloudStack add a label to that pool (primary storage) and then create disk offerings with the label - this way you can force VM's root&data disks to be created on the pool. These are called storage tags (we've something similar called host tags which can be used to map compute/service offerings with hypervisor hosts). Lastly, you want to write Marvin-based integration tests specific to your storage provider.

Example implementations for references:
#4304 (ScaleIO storage provider)
https://github.com/apache/cloudstack/tree/master/plugins/storage/volume (all current storage providers)
https://github.com/apache/cloudstack/tree/master/test/integration/plugins (examples of plugin-specific integration tests)
https://cwiki.apache.org/confluence/display/CLOUDSTACK/Storage+subsystem+2.0 (CloudStack storage framework)

Hope this helps.

@rp- rp- force-pushed the linstor-volume-plugin branch from b1fa765 to 7ff45f4 Compare June 18, 2021 10:02
@rohityadavcloud
Copy link
Member

@blueorangutan test centos7 xenserver-71

@blueorangutan
Copy link

@rhtyd a Trillian-Jenkins test job (centos7 mgmt + xenserver-71) has been kicked to run smoke tests

@rohityadavcloud
Copy link
Member

@blueorangutan test centos7 vmware-67u3

@blueorangutan
Copy link

@rhtyd a Trillian-Jenkins test job (centos7 mgmt + vmware-67u3) has been kicked to run smoke tests

rp- added 2 commits September 15, 2021 10:25
This commit adds a volume(primary) storage plugin for the Linstor SDS.
Currently it can create/delete/migrate volumes, snapshots should be possible,
but currently don't work for RAW volume types in cloudstack.
@rp- rp- force-pushed the linstor-volume-plugin branch from ea7efff to 81ec81a Compare September 15, 2021 08:25
@rp-
Copy link
Contributor Author

rp- commented Sep 15, 2021

@rhtyd

LGTM, some changes needed @rp-:

  • Add Apache License 2.0 headers on all new files

Fixed/Added

  • Can you check if changes in the cloudbyte storage plugin necessary

Yes, unfortunately the cloudbyte plugin uses an old version of jersey client and I introduced a newer one which didn't build
correctly if mixed. As far as I remember.
I also assume it is in common interest to only have one version of jersey as dependency.

@rohityadavcloud
Copy link
Member

Thanks @rp-

@blueorangutan
Copy link

Trillian test result (tid-2047)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 34981 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr4994-t2047-kvm-centos7.zip
Smoke tests completed. 89 look OK, 0 have errors
Only failed tests results shown below:

Test Result Time (s) Test File

@nvazquez
Copy link
Contributor

Thanks @rp- @rhtyd - smoke tests passed, let's wait for @sureshanaparti's review

@rohityadavcloud
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@rhtyd a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Trillian test result (tid-2049)
Environment: kvm-centos7 (x2), Advanced Networking with Mgmt server 7
Total time taken: 37354 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr4994-t2049-kvm-centos7.zip
Smoke tests completed. 89 look OK, 0 have errors
Only failed tests results shown below:

Test Result Time (s) Test File

@blueorangutan
Copy link

Packaging result: ✔️ el7 ✔️ el8 ✔️ debian ✔️ suse15. SL-JID 1273

@rohityadavcloud
Copy link
Member

@blueorangutan test

@blueorangutan
Copy link

@rhtyd a Trillian-Jenkins test job (centos7 mgmt + kvm-centos7) has been kicked to run smoke tests

@blueorangutan
Copy link

Trillian test result (tid-2058)
Environment: vmware-67u3 (x2), Advanced Networking with Mgmt server 7
Total time taken: 41973 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr4994-t2058-vmware-67u3.zip
Smoke tests completed. 89 look OK, 0 have errors
Only failed tests results shown below:

Test Result Time (s) Test File

@rohityadavcloud rohityadavcloud merged commit 66c39c1 into apache:main Sep 16, 2021
@rohityadavcloud
Copy link
Member

Merged based on 2xlgtms, and on smoketests and Travis passing. We haven't tested Linstor itself which is tested by @rp-

@sureshanaparti
Copy link
Contributor

Thanks @rp- @rhtyd - smoke tests passed, let's wait for @sureshanaparti's review

@nvazquez reviewed the PR, LGTM.

@rohityadavcloud
Copy link
Member

@rp- @Philipp-Reisner can you check a potential Linstor regression - https://markmail.org/message/tc4qkm2izzcjqahn
I'll tag/cc you in the email thread too.

@soptecsn
Copy link

soptecsn commented Nov 1, 2021

We are trying to deploy linstor driver for primary storage and it is not wokring. We have configured 3 linstor nodes with ZFS, ACS 4.16

First we get an error that linstor was not installed in the host, so we install it and the error disappear, we think is not correct that Host has to be installed with the software because they just to be a "client". But there aren't any documentation about this.

Then, when that error disappear, we try to create a VM and the log in the host show this:

INFO
[kvm.storage.LinstorStorageAdaptor] (agentRequest-Handler-1:null)
(logid:1fb3773c)
Linstor: Created drbd device: /dev/zvol/Linstor-ST04/cs-c3bbbcbb-142a-4f28-bf1b-fd0748c7a6f7_00000
ERROR [kvm.storage.LinstorStorageAdaptor] (agentRequest-Handler-1:null)
(logid:1fb3773c)
org.apache.cloudstack.utils.qemu.QemuImgException: qemu-img:
/dev/zvol/Linstor-ST04/cs-c3bbbcbb-142a-4f28-bf1b-fd0748c7a6f7_00000:
error while
converting raw:
Could not create file:
No such file
or
directory

When we go to the linstor dashboard, we see that Linstor creates a Resource Definition, then a resource into and finally the volumen, until this moment it all looking good, but inmediatly, deletes all resources created (resource definition, resource and volume).

Linstor and Cloudstack are connecting fine when we add the primary storage.

Error from the linstor side:

    ERROR REPORT 617B1236-00000-003014

============================================================

Application: LINBIT® LINSTOR
Module: Controller
Version: 1.15.0
Build ID: 7a46abd8becd8027357d06f5990a272224a71e81
Build time: 2021-09-23T06:21:28+00:00
Error time: 2021-11-01 20:59:15
Node: linstor-st01
Peer: RestClient(10.0.10.26; 'Swagger-Codegen/1.0.0/java')

============================================================

Reported error:

Category: RuntimeException
Class name: ApiRcException
Class canonical name: com.linbit.linstor.core.apicallhandler.response.ApiRcException
Generated at: Method 'loadRscDfn', Source file 'CtrlApiDataLoader.java', Line #188

Error message: Resource definition 'cs-c3bbbcbb-142a-4f28-bf1b-fd0748c7a6f7' not found.

Error context:
Resource definition 'cs-c3bbbcbb-142a-4f28-bf1b-fd0748c7a6f7' not found.

Asynchronous stage backtrace:

Error has been observed at the following site(s):
	|_ checkpoint ⇢ Clone resource-definition
Stack trace:

Call backtrace:

Method                                   Native Class:Line number
loadRscDfn                               N      com.linbit.linstor.core.apicallhandler.controller.CtrlApiDataLoader:188

Suppressed exception 1 of 1:

Category: RuntimeException
Class name: OnAssemblyException
Class canonical name: reactor.core.publisher.FluxOnAssembly.OnAssemblyException
Generated at: Method 'loadRscDfn', Source file 'CtrlApiDataLoader.java', Line #188

Error message:
Error has been observed at the following site(s):
|_ checkpoint ⇢ Clone resource-definition
Stack trace:

Error context:
Resource definition 'cs-c3bbbcbb-142a-4f28-bf1b-fd0748c7a6f7' not found.

Call backtrace:

Method                                   Native Class:Line number
loadRscDfn                               N      com.linbit.linstor.core.apicallhandler.controller.CtrlApiDataLoader:188
loadRscDfn                               N      com.linbit.linstor.core.apicallhandler.controller.CtrlApiDataLoader:162
cloneRscDfnInTransaction                 N      com.linbit.linstor.core.apicallhandler.controller.CtrlRscDfnApiCallHandler:850
lambda$cloneRscDfn$6                     N      com.linbit.linstor.core.apicallhandler.controller.CtrlRscDfnApiCallHandler:723
doInScope                                N      com.linbit.linstor.core.apicallhandler.ScopeRunner:147
lambda$fluxInScope$0                     N      com.linbit.linstor.core.apicallhandler.ScopeRunner:75
call                                     N      reactor.core.publisher.MonoCallable:91
trySubscribeScalarMap                    N      reactor.core.publisher.FluxFlatMap:126
subscribeOrReturn                        N      reactor.core.publisher.MonoFlatMapMany:49
subscribe                                N      reactor.core.publisher.Flux:8343
onNext                                   N      reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain:188
request                                  N      reactor.core.publisher.Operators$ScalarSubscription:2344
onSubscribe                              N      reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain:134
subscribe                                N      reactor.core.publisher.MonoCurrentContext:35
subscribe                                N      reactor.core.publisher.Flux:8357
onNext                                   N      reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain:188
request                                  N      reactor.core.publisher.Operators$ScalarSubscription:2344
onSubscribe                              N      reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain:134
subscribe                                N      reactor.core.publisher.MonoCurrentContext:35
subscribe                                N      reactor.core.publisher.Flux:8357
onNext                                   N      reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain:188
onNext                                   N      reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber:121
complete                                 N      reactor.core.publisher.Operators$MonoSubscriber:1782
onComplete                               N      reactor.core.publisher.MonoCollect$CollectSubscriber:152
onComplete                               N      reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner:252
checkTerminated                          N      reactor.core.publisher.FluxFlatMap$FlatMapMain:838
drainLoop                                N      reactor.core.publisher.FluxFlatMap$FlatMapMain:600
drain                                    N      reactor.core.publisher.FluxFlatMap$FlatMapMain:580
onComplete                               N      reactor.core.publisher.FluxFlatMap$FlatMapMain:457
checkTerminated                          N      reactor.core.publisher.FluxFlatMap$FlatMapMain:838
drainLoop                                N      reactor.core.publisher.FluxFlatMap$FlatMapMain:600
innerComplete                            N      reactor.core.publisher.FluxFlatMap$FlatMapMain:909
onComplete                               N      reactor.core.publisher.FluxFlatMap$FlatMapInner:1013
onComplete                               N      reactor.core.publisher.FluxMap$MapSubscriber:136
onComplete                               N      reactor.core.publisher.Operators$MultiSubscriptionSubscriber:2016
onComplete                               N      reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber:78
complete                                 N      reactor.core.publisher.FluxCreate$BaseSink:438
drain                                    N      reactor.core.publisher.FluxCreate$BufferAsyncSink:784
complete                                 N      reactor.core.publisher.FluxCreate$BufferAsyncSink:732
drainLoop                                N      reactor.core.publisher.FluxCreate$SerializedSink:239
drain                                    N      reactor.core.publisher.FluxCreate$SerializedSink:205
complete                                 N      reactor.core.publisher.FluxCreate$SerializedSink:196
apiCallComplete                          N      com.linbit.linstor.netcom.TcpConnectorPeer:455
handleComplete                           N      com.linbit.linstor.proto.CommonMessageProcessor:363
handleDataMessage                        N      com.linbit.linstor.proto.CommonMessageProcessor:287
doProcessInOrderMessage                  N      com.linbit.linstor.proto.CommonMessageProcessor:235
lambda$doProcessMessage$3                N      com.linbit.linstor.proto.CommonMessageProcessor:220
subscribe                                N      reactor.core.publisher.FluxDefer:46
subscribe                                N      reactor.core.publisher.Flux:8357
onNext                                   N      reactor.core.publisher.FluxFlatMap$FlatMapMain:418
drainAsync                               N      reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber:414
drain                                    N      reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber:679
onNext                                   N      reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber:243
drainFused                               N      reactor.core.publisher.UnicastProcessor:286
drain                                    N      reactor.core.publisher.UnicastProcessor:329
onNext                                   N      reactor.core.publisher.UnicastProcessor:408
next                                     N      reactor.core.publisher.FluxCreate$IgnoreSink:618
drainLoop                                N      reactor.core.publisher.FluxCreate$SerializedSink:248
next                                     N      reactor.core.publisher.FluxCreate$SerializedSink:168
processInOrder                           N      com.linbit.linstor.netcom.TcpConnectorPeer:373
doProcessMessage                         N      com.linbit.linstor.proto.CommonMessageProcessor:218
lambda$processMessage$2                  N      com.linbit.linstor.proto.CommonMessageProcessor:164
onNext                                   N      reactor.core.publisher.FluxPeek$PeekSubscriber:177
runAsync                                 N      reactor.core.publisher.FluxPublishOn$PublishOnSubscriber:439
run                                      N      reactor.core.publisher.FluxPublishOn$PublishOnSubscriber:526
call                                     N      reactor.core.scheduler.WorkerTask:84
call                                     N      reactor.core.scheduler.WorkerTask:37
run                                      N      java.util.concurrent.FutureTask:264
run                                      N      java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask:304
runWorker                                N      java.util.concurrent.ThreadPoolExecutor:1128
run                                      N      java.util.concurrent.ThreadPoolExecutor$Worker:628
run                                      N      java.lang.Thread:829

END OF ERROR REPORT.

@nvazquez
Copy link
Contributor

nvazquez commented Nov 2, 2021

Hi @rp- @Philipp-Reisner can you please advise on the reported issue? Could be a configuration issue or a bug in CloudStack that needs fixing?

@rp-
Copy link
Contributor Author

rp- commented Nov 2, 2021

@nvazquez I'm on it via a different communication channel

But I suspect a configuration problem, I'll report back here what solved the case.

@rp- rp- deleted the linstor-volume-plugin branch February 5, 2024 08:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support for Linstor