ovirt3.5 - deep dive - foreman bare metal provisioning
by Barak Azulay
------=_Part_28038626_1410674138.1407773105732
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
The following meeting has been modified:
Subject: ovirt3.5 - deep dive - foreman bare metal provisioning
Organizer: "Barak Azulay" <bazulay(a)redhat.com>
Time: Tuesday, August 12, 2014, 5:00:00 PM - 5:30:00 PM GMT +02:00 Jerusalem
Required: users(a)ovirt.org; devel(a)ovirt.org; ybronhei(a)redhat.com; ovedo(a)redhat.com; Karli.Sjoberg(a)slu.se; don(a)techcetera.com; sabose(a)redhat.com; anish.mohan1(a)tcs.com; jorick(a)netbulae.eu; sbonazzo(a)redhat.com; otavio.ferranti(a)eldorado.org.br ...
Optional: wlbleaboy(a)126.com; jweiss(a)mairie-saint-ouen.fr
*~*~*~*~*~*~*~*~*~*
This session will introduce the integration with foreman bare metal provisioning with oVirt.
wiki: http://www.ovirt.org/Features/AdvancedForemanIntegration
Google hangout link : https://www.youtube.com/watch?v=gozX891kYAY
Thanks
Barak Azulay
------=_Part_28038626_1410674138.1407773105732
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=meeting.ics
Content-Transfer-Encoding: quoted-printable
BEGIN:VCALENDAR
PRODID:Zimbra-Calendar-Provider
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Asia/Jerusalem
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETTO:+0200
TZOFFSETFROM:+0300
RRULE:FREQ=3DYEARLY;WKST=3DMO;INTERVAL=3D1;BYMONTH=3D10;BYDAY=3D-1SU
TZNAME:IST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETTO:+0300
TZOFFSETFROM:+0200
RRULE:FREQ=3DYEARLY;WKST=3DMO;INTERVAL=3D1;BYMONTH=3D3;BYDAY=3D-1FR
TZNAME:IDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:d716b750-dc83-4df2-b2ec-eb83337d6e77
SUMMARY:ovirt3.5 - deep dive - foreman bare metal provisioning
ATTENDEE;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DNEEDS-ACTION;RSVP=3DTRUE:mailto:=
users@o
virt.org
ATTENDEE;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DNEEDS-ACTION;RSVP=3DTRUE:mailto:=
devel@o
virt.org
ATTENDEE;CN=3Dybronhei;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DNEEDS-ACTION;RSVP=
=3DTRUE:ma
ilto:ybronhei@redhat.com
ATTENDEE;CN=3DOved Ourfalli;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DNEEDS-ACTION;=
RSVP=3DTR
UE:mailto:ovedo@redhat.com
ATTENDEE;CN=3D"Karli Sj=C3=B6berg";ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DDECLIN=
ED;RSVP=3DTRUE
:mailto:Karli.Sjoberg@slu.se
ATTENDEE;CN=3DDon Harris;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DDECLINED;RSVP=3D=
TRUE:mail
to:don@techcetera.com
ATTENDEE;CN=3DSahina Bose;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DACCEPTED;RSVP=
=3DTRUE:mai
lto:sabose@redhat.com
ATTENDEE;CN=3DAnish Mohan1/MUM/TCS;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DACCEPT=
ED;RSVP
=3DTRUE:mailto:anish.mohan1@tcs.com
ATTENDEE;CN=3Djorick(a)netbulae.eu;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DACCEPTED=
;RSVP=3DT
RUE:mailto:jorick@netbulae.eu
ATTENDEE;CN=3DSandro Bonazzola;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DACCEPTED;R=
SVP=3DTRU
E:mailto:sbonazzo@redhat.com
ATTENDEE;CN=3DOtavio Luiz Ferranti;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DDECLIN=
ED;RSVP
=3DTRUE:mailto:otavio.ferranti@eldorado.org.br
ATTENDEE;CN=3DVojtech Szocs;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DACCEPTED;RSVP=
=3DTRUE:m
ailto:vszocs@redhat.com
ATTENDEE;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DDECLINED;RSVP=3DTRUE:mailto:dbis=
hop@con
trolscan.com
ATTENDEE;CN=3DBrandon Salmon;ROLE=3DREQ-PARTICIPANT;PARTSTAT=3DDECLINED;RSV=
P=3DTRUE:
mailto:bsalmon@tintri.com
ATTENDEE;CN=3D"=E5=8A=9B=E6=B3=A2 =E7=8E=8B";ROLE=3DOPT-PARTICIPANT;PARTSTA=
T=3DACCEPTED;RSVP=3DTRUE:mailto:w
lbleaboy(a)126.com
ATTENDEE;CN=3DJean-Pierre WEISS;ROLE=3DOPT-PARTICIPANT;PARTSTAT=3DNEEDS-ACT=
ION;RSV
P=3DTRUE:mailto:jweiss@mairie-saint-ouen.fr
ORGANIZER;CN=3DBarak Azulay:mailto:bazulay@redhat.com
DTSTART;TZID=3D"Asia/Jerusalem":20140812T170000
DTEND;TZID=3D"Asia/Jerusalem":20140812T173000
STATUS:CONFIRMED
CLASS:PUBLIC
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
TRANSP:OPAQUE
LAST-MODIFIED:20140811T160505Z
DTSTAMP:20140811T160505Z
SEQUENCE:1
DESCRIPTION:The following meeting has been modified:\n\nSubject: ovirt3.5 -=
=20
deep dive - foreman bare metal provisioning \nOrganizer: "Barak Azulay" <b=
az
ulay(a)redhat.com> \n\nTime: Tuesday\, August 12\, 2014\, 5:00:00 PM - 5:30:=
00
PM GMT +02:00 Jerusalem\n \nRequired: users(a)ovirt.org\; devel(a)ovirt.org\;=
y
bronhei(a)redhat.com\; ovedo(a)redhat.com\; Karli.Sjoberg(a)slu.se\; don@techcet=
er
a.com\; sabose(a)redhat.com\; anish.mohan1(a)tcs.com\; jorick(a)netbulae.eu\; sb=
on
azzo(a)redhat.com\; otavio.ferranti(a)eldorado.org.br ... \nOptional: wlbleabo=
y@
126.com\; jweiss(a)mairie-saint-ouen.fr \n\n*~*~*~*~*~*~*~*~*~*\n\nThis sess=
io
n will introduce the integration with foreman bare metal provisioning with=
o
Virt. \n\nwiki: http://www.ovirt.org/Features/AdvancedForemanIntegration\n=
Go
ogle hangout link : https://www.youtube.com/watch?v=3DgozX891kYAY\n\nThank=
s\nB
arak Azulay\n
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=3DSTART:-PT5M
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
------=_Part_28038626_1410674138.1407773105732--
10 years, 3 months
Re: [ovirt-devel] GWT debug slowness.
by Vojtech Szocs
Hi Alex,
(adding devel list to share it with others)
I really appreciate that you took the time to analyze GWT EventBus activity!
As we discussed on IRC, @ProxyEvent in AbstractSubTabPresenter is the most
likely cause of overall UI slowness after successful user authentication.
Fix for this should be rather easy and harmless, please add me as reviewer
once you come up with the relevant patch.
Another thing is "refresh on logout" for all (both) GWT applications. This
is mainly due to planned SSO changes (there will be a dedicated interactive
login page for entire Engine); for us it means that "login" section of all
GWT applications will be unnecessary. Before that, however, we can already
implement "refresh on logout". As a nice side effect, we can remove some of
our infra (UiCommonInitEvent & friends) to make it more simple.
Please find some more comments below (inline).
Thanks,
Vojtech
----- Original Message -----
> From: "Alexander Wels" <awels(a)redhat.com>
> To: vszocs(a)redhat.com
> Cc: ecohen(a)redhat.com, gshereme(a)redhat.com
> Sent: Friday, July 25, 2014 7:59:56 PM
> Subject: Re: GWT debug slowness.
>
> On Friday, July 25, 2014 09:28:33 AM Alexander Wels wrote:
> > Vojtech,
> >
> > I know you suggested that maybe the event bus was getting overloaded with
> > events might be the cause of the slowness in the GWT debug mode. So I
> > modified the event bus implementation to record the number of events, their
> > handlers, and the occurrences of those events.
> >
> > This is right after the login page is loaded.
> > +---------------------------------------------------+-----------+-----------
> > +
> > |Type |handlers |fired
> > ||
> > +---------------------------------------------------+-----------+-----------
> > +
> > |event: ApplicationFocusChangeEvent: |0 |2
> > || event: LockInteractionEvent: |2 |2
> > | | event: NavigationEvent: |0 |1
> > | | event: PlaceRequestInternalEvent: |111 |1
> > | | event: ResetPresentersEvent: |1 |1
> > | | event: RevealRootLayoutContentEvent: |1
> > ||1 |
> > +---------------------------------------------------+-----------+-----------
> > +
Just for clarification:
* ApplicationFocusChangeEvent - fired by our infra whenever browser/window
gains or looses focus (we use this to throttle UiCommon model refresh
timers, i.e. when out of focus, lower the refresh rate)
* LockInteractionEvent - fired by GWTP infra, indicates that UI interaction
should be avoided because the application is currently in transition from
one place to another (in practice, invisible "glass" <div> element covers
the entire viewport during transition, see RootPresenter.RootView)
Note: we had plans to provide some "In progress..." label (just like you
see in Gmail) to make this obvious to end users, there's also RFE on this
* NavigationEvent - fired by GWTP infra, it's a hook we don't use
* PlaceRequestInternalEvent - fired by GWTP infra, PlaceManagerImpl fires
this event to ask all proxies: "which one of you can reveal a presenter
with name token xxx" (i.e. "dataCenters-clusters")
Note: handler count is high because EACH presenter proxy adds handler
for this event.
* ResetPresentersEvent - fired by GWTP infra, after transition to new place
is complete, trigger "onReset" lifecycle method on all presenters present
on "reveal path" (from leaf to root)
* RevealRootLayoutContentEvent - fired by GWTP infra, this makes GWTP root
presenter/view reveal within the browser/window viewport
> >
> > This is right after you login, and the VM main tab is displayed
> > +---------------------------------------------------+-----------+-----------
> > +
> > |Type |handlers |fired
> > ||
> > +---------------------------------------------------+-----------+-----------
> > +
> > |event: UiCommonInitEvent: |715 |1
> > || event: RestApiSessionAcquiredEvent: |1 |1
> > | | event: UserLoginChangeEvent: |3 |1
> > | | event: ApplicationFocusChangeEvent: |80 |2
> > | | event: LockInteractionEvent: |2 |3
> > | | event: NavigationEvent: |0
> > ||1 | event: PlaceRequestInternalEvent: |205
> > | |2 | event: InitializeEvent: |167
> > | |170 | event: SSOTokenChangeEvent: |1
> > | |1 | event: ResetPresentersEvent: |1
> > | |1 | event: RevealRootLayoutContentEvent:
> > ||1 |1 |
> > +---------------------------------------------------+-----------+-----------
> > +
Most of these events are fired by our own infra.
UiCommonInitEvent has so many handlers due to following components:
* TabModelProvider (access to UiCommon models)
* AbstractActionPanel (for each "action button" definition!)
* UiCommandButtonDefinition (button bound to UiCommon model "command")
* AbstractRefreshManager (controlling refresh of list models)
* ModelBoundTab (tab's properties bound to UiCommon model properties)
* AbstractActionTable (added recently, for search string change stuff)
* some more classes (UserPortalConfigurator, WebAdminConfigurator,
SearchPanelPresenterWidget)
Each component mentioned above needs to be notified when relevant
UiCommon model changes. As you might know, on each login, current
CommonModel (root model) instance is thrown away (if any) and new
CommonModel instance is created. CommonModel in turn creates its
"child" models, which create their "child" models, etc. This is,
in my opinion, one of the BIGGEST flaws of UiCommon code design;
it makes models tightly coupled with all subsequent consequences.
(As with any kind of design, once it's put to use on a bigger scale,
it's really hard to change in a way that's consistent, safe and not
too invasive.)
I was, for a very long time, convinced that we can still have a nice
single-page AJAX GWT UI application that doesn't need "refresh on
logout", i.e. application that properly handles UiCommon. In light
of upcoming SSO changes, however, we should do "refresh on logout".
This will allow us to:
* (future) eliminate GWT login screen entirely, in favor of SSO
interactive login page
* (now) eliminate complex infra (UiCommonInitEvent & friends)
in order to properly use UiCommon in single-page application
scenario
(BTW, PlaceRequestInternalEvent handler count increased from 111
to 205, not sure what is the exact cause of this, I'd have to dig
deeper into GWTP infra code.)
> >
> > As you can see the number of events fired is not all that high, the only
> > somewhat strange thing, is that there are a huge number of
> > UiCommonInitEvent handlers. Doing a quick search reveals that every tab
> > provider, every refresh manager (refresh button) and a whole bunch of other
> > widgets all have handlers, which does explain the huge number of handlers.
Yup. All of this is needed to properly use UiCommon in single-page
scenario, i.e. UI components need to be notified whenever UiCommon
model instances change (typically due to UI login).
If UiCommon wasn't designed to instantiate whole model tree right
on successful login (replacing old instances with new ones), we
wouldn't have to deal with this issue. The whole UiCommonInitEvent
infra is to ensure we use UiCommon in a way it was designed to be
used.
> >
> > In short I don't think the slowness is related to the EventBus at this
> > point
> > in time and I will have to look else where for the problem.
> >
>
> To respond to myself (isn't talking to yourself a sign of insanity?).
Nah :) re-thinking what you thought previously is a good thing.
> I did
> some profiling
> while running in GWT debug mode, and I discovered the following sequence of
> events
> which seems to be related to the huge number of UiCommonInitEvent handlers.
>
> I found that most of the time was taken during the UiCommonInitEvent firing.
> which
> led me to see which one of the handlers was taking so long. So I profiled the
> time each
> handler took to complete. I noticed something really strange, the tab
> providers all
> took between 0 and 1ms.
It's because TabModelProvider#onCommonModelChange is not special in any way.
> But every single sub tab presenter for every single
> sub tab
> was taking between 500 and 3000ms depending on the presenter.
It's because creation of presenter triggeres creation of view, and creation
of view triggers HTML DOM operations which can be expensive, depending on
the complexity of the view/HTML.
It's very important to realize that presenter must be first created and bound
(presenter's proxy takes care of this) and only THEN presenter is able to deal
with events such as UiCommonInitEvent.
@ProxyEvent causes event handler to be registered on proxy itself - whenever
such event occurs, proxy will create & bind presenter and call corresponding
@ProxyEvent method on presenter.
This is also why you're observing 500 .. 3000ms times.
> Since we have
> like
> 200 of those presenters, every single one of them was being
> called/initialized and
> taking time, even if we never used them. It turns out we had a ProxyEvent on
> AbstractSubTabPresenter, which would cause every single sub tab presenter to
> load
> (since they were code splitted, this takes a lot of requests).
>
> @ProxyEvent
> public void onUiCommonInit(UiCommonInitEvent event) {
> ...initialize some handlers...
> }
Correct! @ProxyEvent is a "lazy" programmer's trick to ensure that presenter
never misses on any event of given type.
The downside is that when such event (UiCommonInitEvent) happens, possibly
TONS of presenters (and associated views) will be created & bound.
As we discussed, we can improve this by moving relevant code into onBind()
presenter lifecycle callback.
>
> So what I did to solve the problem, I removed the @ProxyEvent, and renamed it
> initializeHandlers. Then instead of them being called in response to the
> onUiCommonInit event, I put the call in onBind of the presenter. If I
> understand the
> GWTP life cycle correctly this should have the same effect as before (the
> handlers are
> initialized before they are needed) and thus everything should work the same.
onBind() is called once per lifetime of bound object.
All presenters are singletons, so onBind() is called once in their lifetime.
A common trick is to do following in onBind():
// For any future occurences of event
registerHandler(eventBus.addHandler(..foo()..));
// For the first time, if needed
foo();
(Assuming foo() contains init logic sensitive to given event.)
>
> The results that I have observed so far from these changes:
> - GWT debug mode login takes ~50s instead of 4:30.
> - The number of requests to the engine dropped from around 80 to around 20.
> - In compiled mode the login is much much faster.
> - I haven't checked the memory usage, but I am guessing it will be much lower
> with all
> presenters not being in memory until they are needed.
Great stuff! Maybe we could squeeze this in 3.5 too :)
>
> My only concern at this point, is that I am not aware of a particular
> sequence that
> requires the presenters to be present somewhere, and now they are not, and
> something doesn't work.
Communication is mostly done through events, so EventBus is essentially
the only direct dependency between all presenters. In practice, there
might be exceptions, but in general, events are to decouple presenters.
As for your concern - I don't think we should worry about it. GWTP infra
will always load presenters when they are needed (i.e. for the reveal of
requested place). Our code CAN load them even earlier, if needed (like
with @ProxyEvent).
> In my limited testing everything worked the same as
> before,
> but obviously I haven't touched every single tab and sub tab.
>
> One more thing to note, the proxy event has been like that since before I
> joined Red
> Hat, so again this is NOT the cause for the recent slowdown, but something in
> the
> presenters could have added some time to each of them causing the huge number
> of
> them combined to have a large impact.
The number of sub tabs (and associated UiCommon models) grew over time,
so there's (I think) cumulative performance impact of @ProxyEvent in
AbstractSubTabPresenter.
Sure, there might be other bottlenecks, but we can improve this right
now and gain substantial speed/performance improvement.
(Great job!)
>
> Alexander
>
> > Alexander
>
>
10 years, 3 months
ovirt3.5 - deep dive - foreman bare metal provisioning
by Barak Azulay
------=_Part_27312009_1456966760.1407709448541
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
The following is a new meeting request:
Subject: ovirt3.5 - deep dive - foreman bare metal provisioning
Organizer: "Barak Azulay" <bazulay(a)redhat.com>
Time: Tuesday, August 12, 2014, 5:00:00 PM - 5:30:00 PM GMT +02:00 Jerusalem
Invitees: users(a)ovirt.org; devel(a)ovirt.org; ybronhei(a)redhat.com; ovedo(a)redhat.com
*~*~*~*~*~*~*~*~*~*
This session will introduce the integration with foreman bare metal provisioning with oVirt.
Details will be published soon.
------=_Part_27312009_1456966760.1407709448541
Content-Type: text/calendar; charset=utf-8; method=REQUEST; name=meeting.ics
Content-Transfer-Encoding: 7bit
BEGIN:VCALENDAR
PRODID:Zimbra-Calendar-Provider
VERSION:2.0
METHOD:REQUEST
BEGIN:VTIMEZONE
TZID:Asia/Jerusalem
BEGIN:STANDARD
DTSTART:16010101T020000
TZOFFSETTO:+0200
TZOFFSETFROM:+0300
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=10;BYDAY=-1SU
TZNAME:IST
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETTO:+0300
TZOFFSETFROM:+0200
RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=-1FR
TZNAME:IDT
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
UID:d716b750-dc83-4df2-b2ec-eb83337d6e77
SUMMARY:ovirt3.5 - deep dive - foreman bare metal provisioning
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:users@o
virt.org
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:mailto:devel@o
virt.org
ATTENDEE;CN=ybronhei;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE:ma
ilto:ybronhei@redhat.com
ATTENDEE;CN=Oved Ourfalli;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TR
UE:mailto:ovedo@redhat.com
ORGANIZER;CN=Barak Azulay:mailto:bazulay@redhat.com
DTSTART;TZID="Asia/Jerusalem":20140812T170000
DTEND;TZID="Asia/Jerusalem":20140812T173000
STATUS:CONFIRMED
CLASS:PUBLIC
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
TRANSP:OPAQUE
LAST-MODIFIED:20140810T222408Z
DTSTAMP:20140810T222408Z
SEQUENCE:0
DESCRIPTION:The following is a new meeting request:\n\nSubject: ovirt3.5 - d
eep dive - foreman bare metal provisioning \nOrganizer: "Barak Azulay" <bazu
lay(a)redhat.com> \n\nTime: Tuesday\, August 12\, 2014\, 5:00:00 PM - 5:30:00
PM GMT +02:00 Jerusalem\n \nInvitees: users(a)ovirt.org\; devel(a)ovirt.org\; yb
ronhei(a)redhat.com\; ovedo(a)redhat.com \n\n\n*~*~*~*~*~*~*~*~*~*\n\nThis sessi
on will introduce the integration with foreman bare metal provisioning with
oVirt.\n\nDetails will be published soon.\n\n
BEGIN:VALARM
ACTION:DISPLAY
TRIGGER;RELATED=START:-PT5M
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR
------=_Part_27312009_1456966760.1407709448541--
10 years, 3 months
oVirt 3.5 - deep dive sessions
by Barak Azulay
oVirt 3.5 is just about to be released.
You have a chance to take a look into this new exciting release.
A few deep dive sessions on various features / aspects of this release will be scheduled In the upcoming several weeks .
Stay tuned and join these sessions.
Thanks
Barak Azulay
10 years, 3 months
add a ***Command for a button
by 力波 王
> ŽËÓÊŒþʹÓà MIME žñÊœ¡£ÓÉÓÚÓÊŒþÔĶÁ³ÌÐò²»ÄÜʶ±ð
ŽËžñÊœ£¬ÒòŽË£¬¿ÉÄÜÎÞ·šÊ¶±ðžÃÓÊŒþµÄ·Ö²¿»ò²¿·ÖÄÚÈÝ¡£
--B_3490359053_1250312
Content-type: multipart/alternative;
boundary="B_3490359053_1263648"
--B_3490359053_1263648
Content-type: text/plain;
charset="GB2312"
Content-transfer-encoding: quoted-printable
Hi, everyone:
I added a button on the Template Tab, in the client side, It=A1=AFs OK,
Added the button=A1=AFs callback like this:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
private void backup()
{
BackupInfoParameters param =3D new BackupInfoParameters();
Frontend.RunAction(VdcActionType.Unknown, param, new
IFrontendActionAsyncCallback() {
@Override
public void executed(FrontendActionAsyncResult result) {
}
});
}
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
The BackupInfoCommand.java is :
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
package org.ovirt.engine.core.bll;
import org.ovirt.engine.core.bll.utils.PermissionSubject;
import org.ovirt.engine.core.common.action.BackupInfoParameters;
import java.io.IOException;
import java.util.Collections;
import java.util.List;
/**
* Created by leaboy on 8/7/14.
*/
public class BackupInfoCommand <T extends BackupInfoParameters> extends
CommandBase<T>{
public BackupInfoCommand(T parameters){
super(parameters);
}
@Override
public List<PermissionSubject> getPermissionCheckSubjects() {
return Collections.emptyList();
}
@Override
protected boolean canDoAction() {
return true;
}
@Override
protected void executeCommand() {
int a;
a =3D 1;
try{
Runtime.getRuntime().exec("touch /tmp/tmp.txt");
}catch (IOException e){
e.printStackTrace();
}
}
}
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
And the BackupInfoParameters.java is:
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
package org.ovirt.engine.core.common.action;
/**
* Created by leaboy on 8/7/14.
*/
public class BackupInfoParameters extends VdcActionParametersBase implement=
s
java.io.Serializable{
private static final long serialVersionUID =3D -1363077467684414051L;
private VdcActionType _actionType;
//public BackupInfoParameters(){}
public BackupInfoParameters(){_actionType =3D VdcActionType.Unknown;}
public VdcActionType getActionType() {
return _actionType;
}
}
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Built the code success, but when I clicked the button, got a dialog with th=
e
error info:
Error while executing action: A Request to the Server failed with the
following Status Code: 500
I debug it , find the error is raised at :
protected VdcReturnValueBase evaluateCorrelationId(CommandBase<?>
commandBase) {
VdcReturnValueBase returnValue =3D null;
// Evaluate and set the correlationId on the parameters, fails on
invalid correlation id
returnValue =3D
ExecutionHandler.evaluateCorrelationId(commandBase.getParameters());
if (returnValue !=3D null) {
log.warnFormat("CanDoAction of action {0} failed. Reasons: {1}"=
,
commandBase.getActionType(),
StringUtils.join(returnValue.getCanDoActionMessages(),
','));
}
// Set the correlation-id on the command
=20
commandBase.setCorrelationId(commandBase.getParameters().getCorrelationId()=
)
;
return returnValue;
}
--B_3490359053_1263648
Content-type: text/html;
charset="GB2312"
Content-transfer-encoding: quoted-printable
<html><head></head><body style=3D"word-wrap: break-word; -webkit-nbsp-mode: s=
pace; -webkit-line-break: after-white-space; font-size: 14px; font-family: =CB=
=CE=CC=E5, sans-serif;"><div style=3D"color: rgb(0, 0, 0);">Hi, everyone:</div><div =
style=3D"color: rgb(0, 0, 0);"><span class=3D"Apple-tab-span" style=3D"white-space=
:pre"> </span>I added a button on the Template Tab, in the client side, It&#=
8217;s OK,</div><div style=3D"color: rgb(0, 0, 0);"><img src=3D"cid:871E2E8A-B37=
5-456F-B2CF-9E25AB718A23" type=3D"image/png"></div><div style=3D"color: rgb(0, 0=
, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">Added the button’s =
callback like this:</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"colo=
r: rgb(0, 0, 0);"> private void backup()</div><div style=3D"color: rgb(0,=
0, 0);"> {</div><div style=3D"color: rgb(0, 0, 0);">  =
; BackupInfoParameters param =3D new BackupInfoParameters();</di=
v><div style=3D"color: rgb(0, 0, 0);"> Frontend.Run=
Action(VdcActionType.Unknown, param, new IFrontendActionAsyncCallback() {</d=
iv><div style=3D"color: rgb(0, 0, 0);"> &nbs=
p; @Override</div><div style=3D"color: rgb(0, 0, 0);"> &nb=
sp; public void executed(FrontendActionAsyncResult result) {</=
div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0,=
0);"> }</div><div style=3D"color: rg=
b(0, 0, 0);"> });</div><div style=3D"color: rgb(0, =
0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"=
color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">The Backup=
InfoCommand.java is :</div><div style=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"co=
lor: rgb(0, 0, 0);">package org.ovirt.engine.core.bll;</div><div style=3D"colo=
r: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">import org.ovi=
rt.engine.core.bll.utils.PermissionSubject;</div><div style=3D"color: rgb(0, 0=
, 0);">import org.ovirt.engine.core.common.action.BackupInfoParameters;</div=
><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0)=
;"><br></div><div style=3D"color: rgb(0, 0, 0);">import java.io.IOException;</=
div><div style=3D"color: rgb(0, 0, 0);">import java.util.Collections;</div><di=
v style=3D"color: rgb(0, 0, 0);">import java.util.List;</div><div style=3D"color=
: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">/**</div><div s=
tyle=3D"color: rgb(0, 0, 0);"> * Created by leaboy on 8/7/14.</div><div s=
tyle=3D"color: rgb(0, 0, 0);"> */</div><div style=3D"color: rgb(0, 0, 0);">=
public class BackupInfoCommand <T extends BackupInfoParameters> extend=
s CommandBase<T>{</div><div style=3D"color: rgb(0, 0, 0);"> =
public BackupInfoCommand(T parameters){</div><div style=3D"color: rgb(0, 0, 0=
);"> super(parameters);</div><div style=3D"color: r=
gb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);"><br></d=
iv><div style=3D"color: rgb(0, 0, 0);"> @Override</div><div style=
=3D"color: rgb(0, 0, 0);"> public List<PermissionSubject> g=
etPermissionCheckSubjects() {</div><div style=3D"color: rgb(0, 0, 0);"> =
return Collections.emptyList();</div><div style=3D"color:=
rgb(0, 0, 0);"> }</div><div style=3D"color: rgb(0, 0, 0);"><br><=
/div><div style=3D"color: rgb(0, 0, 0);"> @Override</div><div sty=
le=3D"color: rgb(0, 0, 0);"> protected boolean canDoAction() {</d=
iv><div style=3D"color: rgb(0, 0, 0);"> return true=
;</div><div style=3D"color: rgb(0, 0, 0);"> }</div><div style=3D"co=
lor: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"><br></div><d=
iv style=3D"color: rgb(0, 0, 0);"> @Override</div><div style=3D"col=
or: rgb(0, 0, 0);"> protected void executeCommand() {</div><div=
style=3D"color: rgb(0, 0, 0);"> int a;</div><div s=
tyle=3D"color: rgb(0, 0, 0);"> a =3D 1;</div><div sty=
le=3D"color: rgb(0, 0, 0);"> try{</div><div style=3D"=
color: rgb(0, 0, 0);"> Runtime.getR=
untime().exec("touch /tmp/tmp.txt");</div><div style=3D"color: rgb(0, 0, 0);">=
}catch (IOException e){</div><div style=3D"color: =
rgb(0, 0, 0);"> e.printStackTrace()=
;</div><div style=3D"color: rgb(0, 0, 0);"> }</div>=
<div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);=
"> }</div><div style=3D"color: rgb(0, 0, 0);">}</div><div style=3D"=
color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div styl=
e=3D"color: rgb(0, 0, 0);">And the BackupInfoParameters.java is:</div><div sty=
le=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);">package org.ovi=
rt.engine.core.common.action;</div><div style=3D"color: rgb(0, 0, 0);"><br></d=
iv><div style=3D"color: rgb(0, 0, 0);">/**</div><div style=3D"color: rgb(0, 0, 0=
);"> * Created by leaboy on 8/7/14.</div><div style=3D"color: rgb(0, 0, 0=
);"> */</div><div style=3D"color: rgb(0, 0, 0);">public class BackupInfoP=
arameters extends VdcActionParametersBase implements java.io.Serializable{</=
div><div style=3D"color: rgb(0, 0, 0);"> private static final lon=
g serialVersionUID =3D -1363077467684414051L;</div><div style=3D"color: rgb(0, 0=
, 0);"> private VdcActionType _actionType;</div><div style=3D"col=
or: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> =
//public BackupInfoParameters(){}</div><div style=3D"color: rgb(0, 0, 0);"><b=
r></div><div style=3D"color: rgb(0, 0, 0);"> public BackupInfoPar=
ameters(){_actionType =3D VdcActionType.Unknown;}</div><div style=3D"color: rgb(=
0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);"> public =
VdcActionType getActionType() {</div><div style=3D"color: rgb(0, 0, 0);"> =
; return _actionType;</div><div style=3D"color: rgb(0, 0,=
0);"> }</div><div style=3D"color: rgb(0, 0, 0);">}</div><div sty=
le=3D"color: rgb(0, 0, 0);">=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div =
style=3D"color: rgb(0, 0, 0);">Built the code success, but when I clicked the =
button, got a dialog with the error info:</div><div style=3D"color: rgb(0, 0, =
0);"><br></div><div><b><font color=3D"#ff2600">Error while executing action: A=
Request to the Server failed with the following Status Code: 500</font></b>=
</div><div style=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, =
0, 0);">I debug it , find the error is raised at :</div><div style=3D"color: r=
gb(0, 0, 0);"><br></div><div><div style=3D"color: rgb(0, 0, 0);">protected Vdc=
ReturnValueBase evaluateCorrelationId(CommandBase<?> commandBase) {</d=
iv><div style=3D"color: rgb(0, 0, 0);"> VdcReturnVa=
lueBase returnValue =3D null;</div><div style=3D"color: rgb(0, 0, 0);"><br></div=
><div style=3D"color: rgb(0, 0, 0);"> // Evaluate a=
nd set the correlationId on the parameters, fails on invalid correlation id<=
/div><div> <b> <font color=3D"#ff2600">returnValue =3D=
ExecutionHandler.evaluateCorrelationId(commandBase.getParameters());</font>=
</b></div><div style=3D"color: rgb(0, 0, 0);"> if (=
returnValue !=3D null) {</div><div style=3D"color: rgb(0, 0, 0);"> =
log.warnFormat("CanDoAction of action {0} failed=
. Reasons: {1}", commandBase.getActionType(),</div><div style=3D"color: rgb(0,=
0, 0);"> &nbs=
p; StringUtils.join(returnValue.getCanDoActionMessages(), ','));</div><div s=
tyle=3D"color: rgb(0, 0, 0);"><br></div><div style=3D"color: rgb(0, 0, 0);">&nbs=
p; }</div><div style=3D"color: rgb(0, 0, 0);"> &nbs=
p; // Set the correlation-id on the command</div><div style=3D"c=
olor: rgb(0, 0, 0);"> commandBase.setCorrelationI=
d(commandBase.getParameters().getCorrelationId());</div><div style=3D"color: r=
gb(0, 0, 0);"> return returnValue;</div><div styl=
e=3D"color: rgb(0, 0, 0);"> }</div></div></body></html>
--B_3490359053_1263648--
--B_3490359053_1250312
Content-type: image/png; name="871E2E8A-B375-456F-B2CF-9E25AB718A23.png"
Content-ID: <871E2E8A-B375-456F-B2CF-9E25AB718A23>
Content-disposition: inline;
filename="871E2E8A-B375-456F-B2CF-9E25AB718A23.png"
Content-transfer-encoding: base64
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
FksWd0bJR8VF1UdNRXtFl0VLl1gsWbPkRoxajCCmPRYfGxV7JHZyqffS3UuH4+ziCuPuLjNc
lrPs2nK15anLz66QX8FZcSoeGx8d3xD/iRPCqeVMrvRfuXflBNeTu4f7kufGK+eN8V34ZfyR
BJeEsoTRRJfEXYljSa5JFUnjAk9BteB1sl/ygeSplJCUoykzqdGpzWmEtPi000IlYYqwK10z
PSe9L8M0ozBDuspp1e5VE6JA0ZFMKHNZZruYjv5M9UiMJJslg1kLs2qy3mdHZZ/KUcwR5vTk
muRuyx3J88n7fjVmNXd1Z752/ob8wTXuaw6thdauXNu5Tnddwbrh9b7rj20gbUjZ8MtGy41l
G99uit7UUaBRsL5gaLPv5sZCuUJR4b0tzlsObMVsFWzt3WazrWrblyJe0fViy+KK4k8l3JLr
31l9V/ndzPaE7b2l9qX7d+B2CHfc3em681iZYlle2dCu4F2t5czyovK3u1fsvlZhW3FgD2mP
ZI+0MqiyvUqvakfVp+qk6oEaj5rmvep7t+2d2sfb17/fbX/TAY0DxQc+HhQcvH/I91BrrUFt
xWHc4azDz+ui6rq/Z39ff0TtSPGRz0eFR6XHwo911TvU1zeoN5Q2wo2SxrHjccdv/eD1Q3sT
q+lQM6O5+AQ4ITnx4sf4H++eDDzZeYp9qukn/Z/2ttBailqh1tzWibakNml7THvf6YDTnR3O
HS0/m/989Iz2mZqzymdLz5HOFZybOZ93fvJCxoXxi4kXhzpXdD66tOTSna6wrt7LgZevXvG5
cqnbvfv8VZerZ645XTt9nX297Yb9jdYeu56WX+x+aem172296XCz/ZbjrY6+BX3n+l37L972
un3ljv+dGwOLBvruLr57/17cPel93v3RB6kPXj/Mejj9aP1j7OOiJwpPKp6qP6391fjXZqm9
9Oyg12DPs4hnj4a4Qy//lfmvT8MFz6nPK0a0RupHrUfPjPmM3Xqx9MXwy4yX0+OFvyn+tveV
0auffnf7vWdiycTwa9HrmT9K3qi+OfrW9m3nZOjk03dp76anit6rvj/2gf2h+2P0x5Hp7E/4
T5WfjT93fAn88ngmbWbm3/eE8/syOll+AAAqqElEQVR4Ae2dB9xUxfX3D0qvIiJNlGIEaQqo
qBAb2LBiL1hfg4lKyD8xiW9MLB+NbzRIokYTjRV7B/OqCIgVsYAo2AAVEQRBEJAOiv/9zpOz
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
PYC9OnUB1oMPPuhOoPsgtGvXbrPb+vhu7o477ui+mfvRRx8JF3d8+umnsuuuu/pRs7Jr/o0b
N07H40AwV463bds27VaOFi0bn171KQxb3z9fe751smTJEjnyyCPT+PMZUurjsssuc4e1s+Hv
7bffloceekj+/ve/ZxOtYGGDZeHQMt+IHjZsmOy///455cPtl9yCaWQIGAKGgCFgCBgChkA5
IlBQZQIA+DzoaaedlhgLvp3LjxuUp02blpcyofmfeuqp6fwXL14szz77rAwePNh9vjTtUYaW
bLHNp4gIytw9UIg6QQF68sknHTtckHb66afLlClTZO+9986HxS0S1y8LDHzyySdy0UUXyQsv
vJD1N6DXrl0rDzzwQGJlgjqxr2RtkWq3TA0BQ8AQMAQMAUMgAoGCKxMR+bjv2E+YMEG4Fpxb
khFUoa+++kqmT5/u7idYvny5vPTSS+7ijqh0snXn2nEEsDVr1rh8EWLJE8GMFYwDDjhAFi5c
KFOnTnXP8IDAiN+3334rPDNzzIVsb731lixYsMDNqBOGuM8884yblW7RooVjDcWlR48ebiY+
LK+quH8BgX/ZsmWOHy44GTt2rJxwwgnpcsGr3nLMVe3cBRFWFnB47733XF117NhRvv76a1f+
QtYJfEDgRRu4+uqrXX2gTO62227yhz/8wdXXLbfcIqxE4D5o0CA55ZRTXDz941bI6667Tv7x
j3+4S15QVm688Ubnfc0110jv3r1l++23l7vvvltat24tK1askFWrVslf//rXzVbONM1czM6d
OzsllVWLli1byh133OH4pn1xg+Uf//hHhyEmdzmsX79ejj32WDnxxBMd/19++aVceeWVDoeb
b75Z3n33XamZuk2cuJdffrlT5u677z53sdzhhx/usAjLA0XTyBAwBAwBQ8AQMAQMgWIjULQz
E3PmzHGC1PHHHy9cwoHw6xMXdSDAcwNgIYl82YrCZSAoEaxUIMwdd9xxTmhj
ZpmtUPDDVpWj
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
TkSuQmCC
--B_3490359053_1250312--
10 years, 3 months
[GUI] Generic Event/IEventListener
by Lior Vernia
Hello developers,
I've just pushed a patch which renders the Event and IEventListener
generic, parameterized by the type of event arguments they receive,
reviews are welcome (note some preceding and succeeding patches):
http://gerrit.ovirt.org/#/c/31194/
If merged, this should enable us to slowly remove unsafe casts, e.g. as
is often done with PropertyChangedEventArgs. I have used this (in
succeeding patches) to eliminate a couple of such coverity scan defects.
It will also add a lot of IDE warnings until most events and listeners
are properly parameterized, as was the case with the parameterization of
EntityModel and ListModel...
Yours, Lior.
10 years, 3 months
Build failure on F19
by Colin Coe
Hi all
I'm attempting to build oVirt Engine from git. I've been following
http://www.ovirt.org/OVirt_Engine_Development_Environment
The errors I'm seeing are:
---
Results :
Tests in error:
initializationError(org.ovirt.engine.api.restapi.resource.BackendResourceInfoDetailTest):
Bad <init> method call from inside of a branch
Exception Details:
Location:
org/ovirt/engine/api/restapi/resource/AbstractBackendResourceLoggingTest.<init>(Lorg/powermock/core/IndicateReloadClass;)V
@40: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0000000: 2a2b 4e4d 1210 b800 1604 bd00 0d59 032d
0000010: 5312 a6b8 001b b800 213a 0519 05b2 0025
0000020: a500 0e2a 01c0 0027 b700 2aa7 000a 2c2d
0000030: b700 2a01 57b1
Stackmap Table:
full_frame(@46,{UninitializedThis,Object[#39],UninitializedThis,Object[#39],Top,Object[#13]},{})
full_frame(@53,{Object[#2],Object[#39],Object[#2],Object[#39],Top,Object[#13]},{})
initializationError(org.ovirt.engine.api.restapi.resource.BackendResourceDebugDetailTest):
Bad <init> method call from inside of a branch
Exception Details:
Location:
org/ovirt/engine/api/restapi/resource/AbstractBackendResourceLoggingTest.<init>(Lorg/powermock/core/IndicateReloadClass;)V
@40: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0000000: 2a2b 4e4d 1210 b800 1604 bd00 0d59 032d
0000010: 5312 a6b8 001b b800 213a 0519 05b2 0025
0000020: a500 0e2a 01c0 0027 b700 2aa7 000a 2c2d
0000030: b700 2a01 57b1
Stackmap Table:
full_frame(@46,{UninitializedThis,Object[#39],UninitializedThis,Object[#39],Top,Object[#13]},{})
full_frame(@53,{Object[#2],Object[#39],Object[#2],Object[#39],Top,Object[#13]},{})
Tests run: 1427, Failures: 0, Errors: 2, Skipped: 71
[INFO]
------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] ovirt-root ........................................ SUCCESS [0.759s]
[INFO] oVirt Build Tools root ............................ SUCCESS [0.026s]
[INFO] oVirt checkstyle .................................. SUCCESS [2.449s]
[INFO] oVirt JBoss Modules Maven Plugin .................. SUCCESS [7.475s]
[INFO] oVirt Checkstyle Checks ........................... SUCCESS [0.442s]
[INFO] Extensions API root ............................... SUCCESS [0.469s]
[INFO] ovirt-engine-extensions-api ....................... SUCCESS [9.139s]
[INFO] oVirt Modules - backend ........................... SUCCESS [0.009s]
[INFO] oVirt Manager ..................................... SUCCESS [0.027s]
[INFO] oVirt Engine dependencies ......................... SUCCESS [5.124s]
[INFO] oVirt Modules - manager ........................... SUCCESS [1.820s]
[INFO] Universal utilities ............................... SUCCESS [1.977s]
[INFO] Extensions manager ................................ SUCCESS [1.645s]
[INFO] CSharp Compatibility .............................. SUCCESS [3.162s]
[INFO] Common Code ....................................... SUCCESS [13.578s]
[INFO] Common utilities .................................. SUCCESS [26.240s]
[INFO] Data Access Layer ................................. SUCCESS [4.415s]
[INFO] engine scheduler bean ............................. SUCCESS [1.519s]
[INFO] Vds broker ........................................ SUCCESS [6.338s]
[INFO] Backend Authentication, Authorization and Accounting SUCCESS
[1.271s]
[INFO] builtin-extensions ................................ SUCCESS [1.574s]
[INFO] Search Backend .................................... SUCCESS [2.958s]
[INFO] Backend Logic @Service bean ....................... SUCCESS [44.189s]
[INFO] oVirt RESTful API Backend Integration ............. SUCCESS [0.305s]
[INFO] oVirt RESTful API interface ....................... SUCCESS [0.138s]
[INFO] oVirt Engine API Definition ....................... SUCCESS [9.658s]
[INFO] oVirt Engine API Commom Parent POM ................ SUCCESS [0.137s]
[INFO] oVirt Engine API Common JAX-RS .................... SUCCESS [2.500s]
[INFO] oVirt RESTful API Backend Integration Type Mappers SUCCESS
[2:14.079s]
[INFO] Branding package .................................. SUCCESS [6.994s]
[INFO] oVirt RESTful API Backend Integration JAX-RS Resources FAILURE
[47.614s]
[INFO] oVirt RESTful API Backend Integration Webapp ...... SKIPPED
[INFO] Custom Logger Using Extensions .................... SKIPPED
[INFO] oVirt Engine Web Root ............................. SKIPPED
[INFO] ovirt-engine services ............................. SKIPPED
[INFO] oVirt Engine Web Docs ............................. SKIPPED
[INFO] ovirt-engine welcome .............................. SKIPPED
[INFO] oVirt Engine Tools ................................ SKIPPED
[INFO] oVirt Modules :: Frontend ......................... SKIPPED
[INFO] oVirt Modules :: Webadmin ......................... SKIPPED
[INFO] oVirt Modules - ui ................................ SKIPPED
[INFO] Extensions for GWT ................................ SKIPPED
[INFO] UI Utils Compatibility (for UICommon) ............. SKIPPED
[INFO] Frontend for GWT UI Projects ...................... SKIPPED
[INFO] UICommonWeb ....................................... SKIPPED
[INFO] oVirt GWT UI common infrastructure ................ SKIPPED
[INFO] WebAdmin .......................................... SKIPPED
[INFO] UserPortal ........................................ SKIPPED
[INFO] oVirt Server EAR .................................. SKIPPED
[INFO] ovirt-engine maven make ........................... SKIPPED
[INFO]
------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 5:40.998s
[INFO] Finished at: Fri Aug 08 07:28:15 WST 2014
[INFO] Final Memory: 88M/211M
[INFO]
------------------------------------------------------------------------
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-surefire-plugin:2.7.2:test (default-test) on
project restapi-jaxrs: There are test failures.
[ERROR]
[ERROR] Please refer to
/home/coec/git/ovirt-engine/backend/manager/modules/restapi/jaxrs/target/surefire-reports
for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e
switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions,
please read the following articles:
[ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the
command
[ERROR] mvn <goals> -rf :restapi-jaxrs
make[2]: *** [maven] Error 1
make[2]: Leaving directory `/home/coec/git/ovirt-engine'
make[1]: *** [tmp.built] Error 2
make[1]: Leaving directory `/home/coec/git/ovirt-engine'
make: *** [all-dev] Error 2
[coec@localhost ovirt-engine]$
---
Any ideas?
Thanks
CC
--
RHCE#805007969328369
10 years, 3 months
'Fake' hosts and VMs
by Colin Coe
Hi all
Is it possible to have fake hosts and VMs. I don't have spare hardware for
hosts nor does my laptop have the grunt for running guests. And as I just
want to hack on the UI, I thought this would be easiest.
Thanks
CC
--
RHCE#805007969328369
10 years, 3 months