prevent them from being serialised alongside the API properties. This will also
be useful for moving the API bindings out of XenModel.
Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
Fixed the bug that caused a disconnected host to appear as if it was still connected in the License Manager. After this commit, if a host get disconnected in the background its row will be disabled and will be unselectable.
(Note that when the connection resumes, the user will still have to click on a different row to have the disabled state (and the buttons) fixed, but that is a Won't fix bug (CA-115261) that I couldn't fix right now.)
Signed-off-by: Gabor Apati-Nagy <gabor.apati-nagy@citrix.com>
in the calculation of the never-expiring licence ("greater than 3653 days" in
LicenceAlert and LicenceStatus vs "greater than or equal to 3653 days" elsewhere).
Signed-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>
- changed the licenseStatus_ItemUpdated event handler to invoke on the main thread, as this is the only case when a background thread needs to update the storedRows list..All the other reads and writes are taken place on the main (UI) thread
- removed the storedRowsLock as it is not needed since we do all the updates to storedRows on one thread.
Signed-off-by: Mihaela Stoica <mihaela.stoica@citrix.com>
We observed that some threads can reach deadlock-ish state after they have Invoked into a control's UI thread. When it happens they are all in a waiting for join or in sleep state for very long time, although there should not be any deadlock situations.
It seems this has something to do with multiple parent controls and with which control we invoked on. This should not make a difference, because we have got one UI thread (for MainWindow) they should wait for, but we have seen it does.
The solution that fixed this issue was to invoke on the MainWindow instead of various controls (see a4fe507adf ).
This changeset is changing all our Invokes to invoke into MainWindow
instead of a control itself. (MainWindow's UI thread is the only UI thread
all Control is using in XenCenter)
This changeset should be in place until we have found the root cause or the exact reason for the above.
The problem was that the License Manager was listening to PropertyChanged events on the master only, not on slaves.
When the master's properties change (e.g. edition) we update the row in the license manager; but in some cases a slave (or more) hasn't been updated yet (as it may be updated in another event.from) and we think that the pool is partially updated.
Our solution is to listen to Host BatchCollectionChanged event, which is triggered once per cache update for the host collection (it any property changed for any of the hosts).
The sleep in the ApplyLicenseEditionAction is not needed anymore, nor is the extra call to update the cell after the action is completed, because the cell is getting updated correctly on the BatchCollectionChanged event.
Signed-off-by: Mihaela Stoica <mihaela.stoica@citrix.com>
Changes to the License Manager dialog:
- Summary panel: show smaller icons for warning and information messages
- Summary panel: show license entitlements for all Creedence hosts (not eligible for support, eligible for support, enterprise features enabled, etc)
- for free Creedence or Clearwater hosts, the license status is Free (it used to be Expired for ClearwaterOrGreater)
and the text displayed is "Unlicensed" for Creedence and "Unsupported" for Clearwater;
the warning message is "Not eligible for support" (instead of "Your support and maintenance has expired")
Signed-off-by: Mihaela Stoica <mihaela.stoica@citrix.com>
- Added a 'refresh grid' parameter to UpdateRow() which indicates if a sort and refresh of the grid is necessary.
- A sort and refresh is not needed when the user selects a server by pressing the space key or by mouse, but it is needed when the information displayed has changed, for example when the license has changed.
- Also solved a possible null reference exception in CheckableDataGridViewController.ReplaceStoredRow(), by returning -1 if the index is not within the rows range.
Signed-off-by: Mihaela Stoica <mihaela.stoica@citrix.com>