Op 16 dec. 2016 om 23:35 heeft Nir Soffer <nsoffer(a)redhat.com>
het volgende geschreven:
> On Fri, Dec 16, 2016 at 9:15 PM, <joost(a)familiealbers.nl> wrote:
> HI Nir, this is exactly what i am doing.
>
>
connectStoragePool(storagePoolUuid,hostid,'',masterStorageDomainUuid,masterVersion)
>
> What i want however is to ensure i can i.e. start vms even when the engine
> is not available and then make sure they keep running when the engine comes
> online.
>
> If the hostid's mismatch all kinds of errors popup.
> If the hostids i use when calling connectStoragePool match those in the
> engine db my vms keep on running.
> its an awkward setup , i know but it would be really good if i can find out
> the host id the engine has in mind.
> This way i can use this particular hostid when calling connectStoragepool.
>
> also.
>
> Another reason for wanting this functionality is due to the fact the engine
> might be unreachable by the hosts for a few hours due to the fact my dc's
> sometimes run without network.
Interesting use case. What if you use hosted engine, so it is in the
same network as the hosts?
I thought about persisting the host id on the host long time ago, but never
had a good use for this, and your case is a good use case.
Here is a patch persisting the host id in /var/lib/vdsm/storage/host_id.
You will need to modify it a bit for older versions.
https://gerrit.ovirt.org/68666
Nir
>
>
>
>
> Nir Soffer schreef op 2016-12-16 17:48:
>
>>> On Fri, Dec 16, 2016 at 6:15 PM, <joost(a)familiealbers.nl> wrote:
>>>
>>> Hi Nir, thanks.
>>>
>>> I am actually after cases where the storagepool is not mounted.And engine
>>> can not reach vdsm.
>>>
>>>
>>> I can mount it using the vdsm api however i need to use a hostid.
>>> I cant find where to get the particular id from.
>>>
>>> at the moment, when i manually connect the storage pool (using vdsm api)
>>> i
>>> get end up with the following errors as soon as the connection between
>>> engine and vdsm is created.
>>>
>>> jsonrpc.Executor/6::ERROR::2016-12-16
>>> 16:01:57,131::dispatcher::77::Storage.Dispatcher::(wrapper)
{'status':
>>> {'message': "Cannot perform action while storage pool is
connected:
>>> ('hostId=1, newHostId=2',)", 'code': 325}}
>>
>>
>> Not sure what you mean but storagepool not mounted.
>>
>> To work with stoage, you need to
>> - connectStorageServer
>> - connectStoragePool
>>
>> You can the command engine sends when activating a host, and
>> send the same commands from vdsClient or vdscli.py.
>>
>> If your host is connected to the storage, and sanlock is connected joined
>> the lockspace, you can get the host id using sanlock apis.
>>
>> # sanlock client status
>> daemon 82322b57-58f9-4b9a-9661-8489ab66bc86.voodoo6.tl
>> p -1 helper
>> p -1 listener
>> p 4271
>> p -1 status
>> s
>>
>>
>>
16fe0625-be29-4a77-81c5-1bc0e5267eea:1:/dev/16fe0625-be29-4a77-81c5-1bc0e5267eea/ids:0
>> s
>>
>>
>>
eeb8e812-4e69-469a-a07a-272ea3a79105:1:/dev/eeb8e812-4e69-469a-a07a-272ea3a79105/ids:0
>> r
>>
>>
>>
eeb8e812-4e69-469a-a07a-272ea3a79105:SDM:/dev/eeb8e812-4e69-469a-a07a-272ea3a79105/leases:1048576:7
>> p 4271
>>
>> In this case I have 2 locksapces and both use host_id = 1
>>
>> If you are not connected to storage on this host, you can use any
>> available
>> host_id.
>>
>> You can see which hosts are connected using:
>>
>> # sanlock client host_status -D
>> lockspace 16fe0625-be29-4a77-81c5-1bc0e5267eea
>> 1 timestamp 380593
>> last_check=380614
>> last_live=380614
>> last_req=0
>> owner_id=1
>> owner_generation=15
>> timestamp=380593
>> io_timeout=10
>> owner_name=82322b57-58f9-4b9a-9661-8489ab66bc86.voodoo6.tl
>> lockspace eeb8e812-4e69-469a-a07a-272ea3a79105
>> 1 timestamp 380592
>> last_check=380613
>> last_live=380613
>> last_req=0
>> owner_id=1
>> owner_generation=5
>> timestamp=380592
>> io_timeout=10
>> owner_name=82322b57-58f9-4b9a-9661-8489ab66bc86.voodoo6.tl
>>
>> In this case I have one host (host_id 1), connected to 2 lockspaces
>> (each storage domain have one lockspace using the storage domain uuid)
>>
>> If you want to connect this host to engine, you should use the host id
>> from engine database.
>>
>>>
>>> following this its a cluster of errors, gluster restarts and complains
>>> about
>>> quorum etc etc
>>>
>>>
>>> if i'd redo the commands after reboot (still no connection between vdsm
>>> api
>>> api and engine and use host id 2 on this particular host my problems are
>>> resolved.
>>>
>>>
>>>
>>> also am i right in thinking the values in the db do not change as long as
>>> the hosts remain the same?
>>>
>>>
>>> It would really help me immense to find out the host id before conencting
>>> to
>>> the storagepool and without needed to go into the db.
>>>
>>> thanks.
>>>
>>> Joost
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Nir Soffer schreef op 2016-12-16 16:42:
>>>
>>>>> On Fri, Dec 16, 2016 at 5:20 PM, <joost(a)familiealbers.nl>
wrote:
>>>>>
>>>>>
>>>>> in ovirt engine the table.
>>>>>
>>>>> vds_spm_id_map
>>>>>
>>>>> holds the ids used in spm election.
>>>>>
>>>>> engine_20150824095956=# select * from vds_spm_id_map ;
>>>>> storage_pool_id | vds_spm_id |
>>>>> vds_id
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
--------------------------------------+------------+--------------------------------------
>>>>> 144fb47d-b38c-4bb7-867b-373d7ba9f0a9 | 1 |
>>>>> 313ed02c-8029-4fb3-ba1c-5b3c9902ddb1
>>>>> 144fb47d-b38c-4bb7-867b-373d7ba9f0a9 | 2 |
>>>>> 7fdebf8a-1503-4b54-9681-0201ee330381
>>>>>
>>>>> these particular id's seem to be added when a vds is added to
the
>>>>> engine
>>>>> or
>>>>> when the storage pool is first setup.
>>>>>
>>>>> I would like to be able to obtain this nr (in my case its generally
1
>>>>> or
>>>>> 2
>>>>> as i have two hosts per dc / cluster) through an api or even better
>>>>> from
>>>>> the
>>>>> hosts itself.
>>>>>
>>>>> When testing I connect to the storage pools using the api
>>>>
>>>>
>>>>
>>>> Do you mean vdsm api?
>>>>
>>>> You can get the host id using vdsClient:
>>>>
>>>> # vdsClient -s 0 getStoragePoolInfo fe307b9e-8f6b-4958-955a-0faeeae8b017
>>>> name = No Description
>>>> isoprefix =
>>>> pool_status = connected
>>>> lver = 7
>>>> spm_id = 1
>>>> master_uuid = eeb8e812-4e69-469a-a07a-272ea3a79105
>>>> version = 4
>>>> domains =
>>>>
>>>>
>>>>
>>>>
>>>>
16fe0625-be29-4a77-81c5-1bc0e5267eea:Active,eeb8e812-4e69-469a-a07a-272ea3a79105:Active
>>>> type = ISCSI
>>>> master_ver = 3
>>>> 16fe0625-be29-4a77-81c5-1bc0e5267eea = {'status':
'Active',
>>>> 'diskfree': '97844723712', 'isoprefix':
'', 'alerts': [], 'disktotal':
>>>> '106568876032', 'version': 4}
>>>> eeb8e812-4e69-469a-a07a-272ea3a79105 = {'status':
'Active',
>>>> 'diskfree': '98918465536', 'isoprefix':
'', 'alerts': [], 'disktotal':
>>>> '106568876032', 'version': 4}
>>>>
>>>> If you have vdsm source, you can use the new client:
>>>>
>>>> # contrib/jsonrpc StoragePool getInfo
>>>> storagepoolID=fe307b9e-8f6b-4958-955a-0faeeae8b017
>>>> {
>>>> "info": {
>>>> "name": "No Description",
>>>> "isoprefix": "",
>>>> "pool_status": "connected",
>>>> "lver": 7,
>>>> "spm_id": 1,
>>>> "master_uuid":
"eeb8e812-4e69-469a-a07a-272ea3a79105",
>>>> "version": "4",
>>>> "domains":
>>>>
>>>>
>>>>
>>>>
>>>>
"16fe0625-be29-4a77-81c5-1bc0e5267eea:Active,eeb8e812-4e69-469a-a07a-272ea3a79105:Active",
>>>> "type": "ISCSI",
>>>> "master_ver": 3
>>>> },
>>>> "dominfo": {
>>>> "16fe0625-be29-4a77-81c5-1bc0e5267eea": {
>>>> "status": "Active",
>>>> "diskfree": "97844723712",
>>>> "isoprefix": "",
>>>> "alerts": [],
>>>> "disktotal": "106568876032",
>>>> "version": 4
>>>> },
>>>> "eeb8e812-4e69-469a-a07a-272ea3a79105": {
>>>> "status": "Active",
>>>> "diskfree": "98918465536",
>>>> "isoprefix": "",
>>>> "alerts": [],
>>>> "disktotal": "106568876032",
>>>> "version": 4
>>>> }
>>>> }
>>>> }
>>>>
>>>>> and its important
>>>>> the hostid used when making this api call is correct or bad things
>>>>> happen.
>>>>>
>>>>> I have been searching high and low to no avail. In understand the
>>>>> engine
>>>>> is
>>>>> in charge here but i really would be helped if this values can be
>>>>> obtained
>>>>> without going into the db.
>>>>>
>>>>> As i am continuously rebuilding dc's / storage pools and hosts i
cannot
>>>>> keep
>>>>> track of when which host is installed hence the need to know the
spm_id
>>>>> as
>>>>> listed.
>>>>>
>>>>> It might be i am all wrong but the when i use the vds_spm_id as
listed
>>>>> i
>>>>> can
>>>>> connect the host to the storage pools using the api.
>>>
>>>
>>>
>