These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 
Author Message
 Post subject: sorting out insert statements to avoid deadlock
PostPosted: Tue Oct 25, 2005 6:08 am 
Hi, I am running in a deadlock when 2 transactions are concurrently inserting several objects that involve 2 tables (abstract superclass & concrete subclass): class ActionHistoryEntry extends CaseHistoryEntry. CaseHistoryEntry maps to CASE_LOG, ActionHistoryEntry maps to CASE_LOG_ACTION.

I suspect the problem comes from the successive insert into CASE_LOG,CASE_LOG_ACTION,CASE_LOG,CASE_LOG_ACTION,... in both transactions.

The statement trace I included shows thread 0 inserting 2 ActionHistoryEntry up to 11:15:02,680 followed by thread 3 inserting 2 ActionHistoryEntry up to 11:15:18,461. Then deadlock occurs and thread 0 gets rejected at 11:24:49,075. After that point thread 3 finishes normally.

db usage is typically to do inserts in a global order according to fk dependencies. Here in both transactions I would systematically insert all in CASE_LOG, then all in CASE_LOG_ACTION instead of imbricating statements.

Is there a way to get hibernate to do that, since it knows about fk, it should have all the necessary information...

has anybody had a similar experience?
thanks for help,
v.

Hibernate version: 3.0

Mapping documents:
<hibernate-mapping package="ch.tcs.assys.cases.history" default-cascade="all-delete-orphan" default-lazy="false">
<typedef name="version" class="ch.tcs.assys.hibernate.VersionType" />
<typedef name="datetime" class="ch.tcs.assys.hibernate.DatetimeType" />

<class name="CaseHistoryEntry" table="CASE_LOG">

<id name="id" column="CSLO_ID">
<generator class="ch.tcs.assys.hibernate.SequenceIdentifierGenerator" />
</id>

<version name="version" column="CSLO_UPDT_TIMESTAMP" type="version" />
<property name="userInitials" column="CSLO_UPDT_USER" />

<property name="editable" column="CSLO_IS_EDITABLE" />
<property name="important" column="CSLO_IS_IMPORTANT" />
<property name="caseReferenceNb" column="CASE_REFERENCE_NB" />
<property name="type" column="CSLO_TYPE" />
<property name="subject" column="CSLO_SUBJECT_TK" />
<property name="transactionType" column="CSLO_TRNS_TYPE_TK" />
<property name="transactionStatus" column="CSLO_TRNS_STATUS_TK" />
<property name="accountingReferenceNb" column="CSLO_TRNS_ACCOUNT_REF_NB" />
<property name="creationDate" column="CSLO_CREATION_TIMESTAMP" type="datetime" />

<joined-subclass name="ActionHistoryEntry" table="CASE_LOG_ACTION">
<key column="CSLO_ID" />

<property name="actionId" column="ACTI_ID" />
<property name="actionType" column="ACTT_ID" />

<property name="serviceId" column="SRVC_ID" />
<property name="serviceType" column="SRVT_ID" />

<property name="caseStatus" column="CSST_ID" />
<property name="status" column="CSLA_STATUS_TK" />
<property name="phoneNb" column="CSLA_PHONE_NB" />
<property name="minutes" column="CSLA_ADNL_WAITING_TIME" />

</joined-subclass>

</class>

</hibernate-mapping>



Code between sessionFactory.openSession() and session.close():

Full stack trace of any exception that occurs:
[ORB.thread.pool : 0] 11:24:49,075 ERROR def.AbstractFlushingEventListener - Could not synchronize database state with session
org.hibernate.exception.GenericJDBCException: could not insert: [ch.tcs.assys.cases.history.ActionHistoryEntry]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1869)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:2200)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:46)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:239)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:223)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
at ch.tcs.assys.cases.wrapper.ejb.CaseWrapperImpl.create(Unknown Source)
at ch.tcs.assys.cases.model.helper.CaseModelHelper.confirm(Unknown Source)
at ch.tcs.assys.cases.ejb.CaseFacadeBeanImpl.confirm(Unknown Source)
at ch.tcs.assys.cases.ejb.CaseFacadeBeanImpl$$EnhancerByCGLIB$$cd288036_2.CGLIB$confirm$0(<generated>)
at ch.tcs.assys.cases.ejb.CaseFacadeBeanImpl$$EnhancerByCGLIB$$cd288036_2$$FastClassByCGLIB$$caef933f.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:167)
at ch.tcs.framework.ejb.FacadeInterceptor.intercept(Unknown Source)
at ch.tcs.assys.cases.ejb.CaseFacadeBeanImpl$$EnhancerByCGLIB$$cd288036_2.confirm(<generated>)
at ch.tcs.assys.cases.ejb.CaseFacadeBean.confirm(Unknown Source)
at ch.tcs.assys.cases.ejb.EJSRemoteStatelessCaseFacade_5b30594b.confirm(Unknown Source)
at ch.tcs.assys.cases.ejb._EJSRemoteStatelessCaseFacade_5b30594b_Tie.confirm(_EJSRemoteStatelessCaseFacade_5b30594b_Tie.java:349)
at ch.tcs.assys.cases.ejb._EJSRemoteStatelessCaseFacade_5b30594b_Tie._invoke(_EJSRemoteStatelessCaseFacade_5b30594b_Tie.java:104)
at com.ibm.CORBA.iiop.ServerDelegate.dispatchInvokeHandler(ServerDelegate.java:608)
at com.ibm.CORBA.iiop.ServerDelegate.dispatch(ServerDelegate.java:461)
at com.ibm.rmi.iiop.ORB.process(ORB.java:436)
at com.ibm.CORBA.iiop.ORB.process(ORB.java:1728)
at com.ibm.rmi.iiop.Connection.doWork(Connection.java:2230)
at com.ibm.rmi.iiop.WorkUnitImpl.doWork(WorkUnitImpl.java:65)
at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:95)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:912)
Caused by: COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2/LINUX] SQL0913N Unsuccessful execution caused by deadlock or timeout. Reason code "2". SQLSTATE=57033

at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.throw_SQLException(Unknown Source)
at COM.ibm.db2.jdbc.app.SQLExceptionGenerator.check_return_code(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.execute2(Unknown Source)
at COM.ibm.db2.jdbc.app.DB2PreparedStatement.executeUpdate(Unknown Source)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteUpdate(WSJdbcPreparedStatement.java:664)
at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeUpdate(WSJdbcPreparedStatement.java:483)
at org.hibernate.persister.entity.BasicEntityPersister.insert(BasicEntityPersister.java:1856)
... 28 more


Name and version of the database you are using: db2 on linux

The generated SQL (show_sql=true):
[ORB.thread.pool : 0] 11:15:02,680 DEBUG hibernate.SQL - insert into CASE_LOG (CSLO_UPDT_TIMESTAMP, CSLO_UPDT_USER, CSLO_IS_EDITABLE, CSLO_IS_IMPORTANT, CASE_REFERENCE_NB, CSLO_TYPE, CSLO_SUBJECT_TK, CSLO_TRNS_TYPE_TK, CSLO_TRNS_STATUS_TK, CSLO_TRNS_ACCOUNT_REF_NB, CSLO_CREATION_TIMESTA
MP, CSLO_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 0] 11:15:02,680 DEBUG hibernate.SQL - insert into CASE_LOG_ACTION (ACTI_ID, ACTT_ID, SRVC_ID, SRVT_ID, CSST_ID, CSLA_STATUS_TK, CSLA_PHONE_NB, CSLA_ADNL_WAITING_TIME, CSLO_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:17,852 DEBUG hibernate.SQL - insert into ACCOUNT_DETAIL (CTRY_CODE, ACDT_SUPPLIER_REFERENCE, ACDT_CLIENT_REFERENCE, ACDT_PAYMENT_MODE_TK, ACDT_ACCOUNT_NB, ACDT_BANK_CODE, ACDT_BANK_REFERENCE, ACDT_IBAN_CODE, ACDT_RIB_NB, ACDT_IS_SUBJECT_TO_VAT, ACDT_COUNTRY_G
ROUP, ACDT_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:17,883 DEBUG hibernate.SQL - insert into CONTACT_ADDRESS (CONT_UPDT_TIMESTAMP, CONT_UPDT_USER, CONT_IS_DELETED, DCLG_CODE, CONT_LOCATION_TYPE, CONT_CONTACT_TYPE_TK, CONT_CONTACT_FNAME, CONT_CONTACT_NAME, CONT_CONTACT_BIRTHDAY, CONT_EMAIL, CONT_COMMENT, CONT_I
S_POI_CANDIDATE, CASE_REFERENCE_NB, REGI_ID, CONT_PHONE1, CONT_PHONE2, CONT_PHONE_MOBILE1, CONT_PHONE_MOBILE2, CONT_FAX1, CONT_FAX2, HNOD_ID, HDIR_ID, HWAY_ID, HSEG_ID, CONT_COORD_X, CONT_COORD_Y, CONT_CONTACT_TITLE_TK, ADDR_ID, POFI_ID, ACDT_ID, ALIA_ID, CTRY_CODE, LOCL_ID, CONT_LOCALITY, PCOD_POST
CODE, CONT_POSTCODE, CONT_STREET_NAME, CONT_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:17,930 DEBUG hibernate.SQL - insert into CLIENT (CLIE_UPDT_TIMESTAMP, CLIE_UPDT_USER, CLIE_PERSONAL_REFERENCE, CLIE_IS_EMPLOYEE, CONT_ID, CLIE_ID) values (?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:17,961 DEBUG hibernate.SQL - insert into ADDRESS (ADDR_IS_DELETED, ADDR_TYPE, ADDR_COORD_X, ADDR_COORD_Y, STRT_ID, ADDR_STREET_NAME, ADDR_HOUSE_NB, LOCL_ID, ADDR_LOCALITY, CTRY_CODE, ADDR_HOUSE_DESCRIPTION, PCOD_POSTCODE, ADDR_POSTCODE, STAT_CODE, ADDR_STATE,
ADDR_SITUATION, ADDR_PO_BOX, ADDR_IS_OADR_CANDIDATE, ADDR_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:17,977 DEBUG hibernate.SQL - insert into ACCOUNT_DETAIL (CTRY_CODE, ACDT_SUPPLIER_REFERENCE, ACDT_CLIENT_REFERENCE, ACDT_PAYMENT_MODE_TK, ACDT_ACCOUNT_NB, ACDT_BANK_CODE, ACDT_BANK_REFERENCE, ACDT_IBAN_CODE, ACDT_RIB_NB, ACDT_IS_SUBJECT_TO_VAT, ACDT_COUNTRY_G
ROUP, ACDT_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,008 DEBUG hibernate.SQL - insert into CONTACT_ADDRESS (CONT_UPDT_TIMESTAMP, CONT_UPDT_USER, CONT_IS_DELETED, DCLG_CODE, CONT_LOCATION_TYPE, CONT_CONTACT_TYPE_TK, CONT_CONTACT_FNAME, CONT_CONTACT_NAME, CONT_CONTACT_BIRTHDAY, CONT_EMAIL, CONT_COMMENT, CONT_I
S_POI_CANDIDATE, CASE_REFERENCE_NB, REGI_ID, CONT_PHONE1, CONT_PHONE2, CONT_PHONE_MOBILE1, CONT_PHONE_MOBILE2, CONT_FAX1, CONT_FAX2, HNOD_ID, HDIR_ID, HWAY_ID, HSEG_ID, CONT_COORD_X, CONT_COORD_Y, CONT_CONTACT_TITLE_TK, ADDR_ID, POFI_ID, ACDT_ID, ALIA_ID, CTRY_CODE, LOCL_ID, CONT_LOCALITY, PCOD_POST
CODE, CONT_POSTCODE, CONT_STREET_NAME, CONT_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,071 DEBUG hibernate.SQL - insert into INCIDENT (INCD_UPDT_TIMESTAMP, INCD_UPDT_USER, CAUS_ID_PRIMARY, INCD_DATETIME, INCD_COMMENT, CONT_ID, INCD_ID) values (?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,102 DEBUG hibernate.SQL - insert into CALLER (CLLR_UPDT_TIMESTAMP, CLLR_UPDT_USER, CLLR_GENDER_TK, CLLR_NAME, CLLR_FNAME, CLLR_PHONE1, CLLR_PHONE2, CLLR_PHONE3, CLLR_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,117 DEBUG hibernate.SQL - insert into CALL (CALL_UPDT_TIMESTAMP, CALL_UPDT_USER, CALL_CALLED_NB, CALL_DATE, CALL_POLLUTED_CLIENT_REFERENCE, CALL_COMMENT, CALL_REASON_TK, CALL_CLI, CALL_POLLUTED_LICENSE_PLATE, CALL_POLLUTED_PLATE_CTRY_CODE, CLLR_ID, CALL_ID
) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,149 DEBUG hibernate.SQL - insert into CASE (CASE_UPDT_TIMESTAMP, CASE_UPDT_USER, CALC_ID, SECT_ID, SSCT_ID, CASE_PRIORITY_TK, CASE_ESTIMATED_WAITING_TIME, CASE_WAITING_TIME_EXTENSION, CASE_IS_CLIENT_CALLBACK, CASE_IS_PHYSICAL_AVAILABLE, CASE_EXPECTED_ON_SI
TE_DATETIME, CASE_BREAKDOWN_END_DATETIME, CASE_IS_HANDLED_BY_HELPDESK, CASE_IS_HANDLED_BY_BACKOFFICE, EMPL_ID_MANAGER, EMPL_ID_TRAINEE, CASE_ATTRIBUTION_DATETIME, CASE_TIMER_TRIGGER_DATETIME, CASE_TIMER_TYPE, CSST_ID, clie_id, incd_id, call_id, CASE_REFERENCE_NB) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?
, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,211 DEBUG hibernate.SQL - insert into VEHICLE (VHCL_UPDT_TIMESTAMP, VHCL_UPDT_USER, CASE_REFERENCE_NB, VHCL_GEAR_TYPE_TK, VHCL_CHASSIS_NB, VHCL_OSM_NB, VHCL_TYPE_TK, VHCL_HAS_ROOF_RACK, VHCL_HAS_CYCLE_RACK, VHCL_IS_LOWERED, VHCL_IS_STEERING_DAMAGED, VHCL_I
S_NOT_STARTABLE, VHCL_IS_NOT_MOVABLE, VHCL_BREAKDOWN_TYPE_TK, VHCL_CIRCULATION_START_DATE, VHCL_RESPONSIBILITY_TK, VHCL_COMMENT, VHCL_MISSING_WHEELS_TK, VHCL_ODOMETER, ICOE_ID, VHCL_COLOR_TK, VHCL_COLOR_NAME, VHCL_CTRY_CODE, VHCL_LICENSE_PLATE, VHCL_DOCUMENT_PLACE_TK, VHCL_DOCUMENT_PLACE_NAME, VHCL_
KEY_PLACE_TK, VHCL_KEY_PLACE_NAME, VHCL_LICENSE_PLATE_PLACE_TK, VHCL_LICENSE_PLATE_PLACE_NAME, CMAN_ID, VHCL_MANUFACTURER_NAME, CMOD_ID, VHCL_WEIGHT, VHCL_HEIGHT, VHCL_WIDTH, VHCL_MODEL_NAME, VHCL_LENGTH, CONT_ID, VHCL_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,274 DEBUG hibernate.SQL - insert into CASE_COVERAGE (CASE_REFERENCE_NB, PROD_ID, CCVG_PAYMENT_DATE, CCVG_START_DATE, CCVG_END_DATE, CCVG_SUSPENSION_DATE, CCVG_CANCELLATION_DATE, CCVG_IS_COVERED, CCVG_COMMENT, CCVG_CHASSIS_NB, CCVG_ASSISTANCE_AMOUNT, CCVG_C
LIENT_NB, CTRY_CODE, CCVG_LICENSE_PLATE, CCVG_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,321 DEBUG hibernate.SQL - insert into CASE_LOG (CSLO_UPDT_TIMESTAMP, CSLO_UPDT_USER, CSLO_IS_EDITABLE, CSLO_IS_IMPORTANT, CASE_REFERENCE_NB, CSLO_TYPE, CSLO_SUBJECT_TK, CSLO_TRNS_TYPE_TK, CSLO_TRNS_STATUS_TK, CSLO_TRNS_ACCOUNT_REF_NB, CSLO_CREATION_TIMESTA
MP, CSLO_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,336 DEBUG hibernate.SQL - insert into CASE_LOG_ACTION (ACTI_ID, ACTT_ID, SRVC_ID, SRVT_ID, CSST_ID, CSLA_STATUS_TK, CSLA_PHONE_NB, CSLA_ADNL_WAITING_TIME, CSLO_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,399 DEBUG hibernate.SQL - insert into ACTION (ACTI_UPDT_TIMESTAMP, ACTI_UPDT_USER, ACTI_IS_DELETED, CASE_REFERENCE_NB, ACTI_CREATION_DATETIME, ACTI_PLANNED_DATETIME, ACTI_CLOSURE_DATETIME, ACTI_COMMENT, ACTI_IS_ACKNOWLEDGED, ACTI_IS_DEFAULT, ACTI_IS_TCS_TO
_ORGANIZE, SRVC_ID, ACTT_ID, ACTI_STATUS_TK, EMPL_ID, CALC_ID, ROLE_ID, ACTI_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,430 DEBUG hibernate.SQL - insert into CASE_LOG (CSLO_UPDT_TIMESTAMP, CSLO_UPDT_USER, CSLO_IS_EDITABLE, CSLO_IS_IMPORTANT, CASE_REFERENCE_NB, CSLO_TYPE, CSLO_SUBJECT_TK, CSLO_TRNS_TYPE_TK, CSLO_TRNS_STATUS_TK, CSLO_TRNS_ACCOUNT_REF_NB, CSLO_CREATION_TIMESTA
MP, CSLO_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[ORB.thread.pool : 3] 11:15:18,461 DEBUG hibernate.SQL - insert into CASE_LOG_ACTION (ACTI_ID, ACTT_ID, SRVC_ID, SRVT_ID, CSST_ID, CSLA_STATUS_TK, CSLA_PHONE_NB, CSLA_ADNL_WAITING_TIME, CSLO_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?)


Debug level Hibernate log excerpt: log4j.logger.org.hibernate.SQL=DEBUG


Top
  
 
 Post subject:
PostPosted: Tue Oct 25, 2005 9:17 am 
CGLIB Developer
CGLIB Developer

Joined: Thu Aug 28, 2003 1:44 pm
Posts: 1217
Location: Vilnius, Lithuania
session.flush()


Top
 Profile  
 
 Post subject: session.flush()?
PostPosted: Tue Oct 25, 2005 9:53 am 
session.flush() where?
each transaction does a session.save(anObject) then a session.flush(), that ends up sending inserts to CASE_LOG and CASE_LOG_ACTION.
v.


Top
  
 
 Post subject:
PostPosted: Tue Oct 25, 2005 10:15 am 
CGLIB Developer
CGLIB Developer

Joined: Thu Aug 28, 2003 1:44 pm
Posts: 1217
Location: Vilnius, Lithuania
See "FlushMode", this is a single way to control flush order.
BTW how "ch.tcs.assys.hibernate.SequenceIdentifierGenerator" is implemented ?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 4 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.