Hello Ivan.
I am working with transactions. This is an example using my own wrapper:
SednaWrapper.execute( new SednaHandler() {
public void execute( final SednaWrapper wrapper ) throws Exception {
if(wrapper.existsDocument("summary", oid))
wrapper.deleteResource("summary", oid);
}
});
The wrapper execute methos use transaction:
public static void execute(final SednaHandler handler) throws
Exception {
synchronized( mutexTnx ) {
long startTime = 0;
if( logger.isDebugEnabled() ) {
logger.debug( "Enter execute(SednaHandler) in
SednaWrapper" );
startTime = Calendar.getInstance().getTimeInMillis();
}
SednaWrapper.executeCode( new SednaHandler() {
public void execute( final SednaWrapper wrapper )
throws Exception {
TransactionService ts = null;
try {
ts = wrapper.startTransaction();
handler.execute( wrapper );
wrapper.commitTransaction( ts );
} catch( XMLDBException e ) {
// there is a special case in Sedna, where the
server has killed the current transaction because is in conflict with
another transaction,
// and the current transaction "lost" in the
resolution procedure. The rollback MUST not be called in this case.
boolean isSednaDeadlockResolution = e.errorCode
== ErrorCodes.VENDOR_ERROR && e.vendorErrorCode == 0 && e.getMessage()
!= null && e.getMessage().contains( "SEDNA Message: ERROR SE4703" );
if( !isSednaDeadlockResolution ) {
try {
wrapper.rollbackTransaction( ts );
}
catch( XMLDBException ignored ) {
// safely ignored
logger.error( "Exception: ", ignored );
}
}
logger.error( "Exception: ", e );
throw e;
}
catch( Exception t ) {
try {
wrapper.rollbackTransaction( ts );
}
catch( XMLDBException ignored ) {
// safely ignored
logger.error( "Exception: ", ignored );
}
logger.error( "Exception: ", t );
throw t;
}
}
} );
if( logger.isDebugEnabled() ) {
long endTime = Calendar.getInstance().getTimeInMillis();
double timeInSeconds = (endTime - startTime) / 1000.0;
logger.debug( "Exiting execute(SednaHandler) in
SednaWrapper. Total time: " + timeInSeconds );
}
}
}
I will take a look to the list for discussions about upd_crt.
Thanks and best regards.
Jose Sierra
On 03/04/2013 12:05, Ivan Shcheklein wrote:
Hi Jose,
I understand what's going in this case. Unfortunately, it's how Sedna
works by design.
Very simplified explanation. To provide ACID transactions Sedna uses
snapshots (consider this as multiple copies of the database). All
transactions work with the latests one. If Sedna determines (see
upd_crt in docs) that the current snapshot has been updated enough, it
starts checkpoint procedure - make the current snapshot stable (flash
all changes to the disc) and start a new one (and make it current).
Checkpoint procedure is the problem here. When Sedna wants to start it
(and it may happen right in the middle of your big transaction with a
lot of updates) it stops to accept any new transactions. It can be
considered as a global lock.
It can't be fixed easily. Unfortunately, I don't know if it can be
fixed at all. As a workaround, you can try to avoid very long
transactions which update significant portion of the database. For
example, you can run every DROP as a transaction. You can also try to
tune value of the upd_crt (search history of this list for discussions
about upd_crt).
Ivan Shcheklein,
Sedna Team
On Tue, Apr 2, 2013 at 2:44 PM, Jose Sierra
<jose.sie...@integromics.com <mailto:jose.sie...@integromics.com>> wrote:
Hello Ivan.
I have attached the logs with the problem.
In the logs you can see several delete big files documents:
--- DROP document "BOOKMARK_48597973" in collection "summary"
--- DROP document "BOOKMARK_48597973" in collection "features"
--- DROP document "BOOKMARK_48597973" in collection "peptides"
--- DROP document "BOOKMARK_48597973" in collection "proteins"
When these deleting process are working i try to get some new
queries from differents collections, and the queries is not
returned until the deletion is finished.
I hope these logs help you to calrify my doubt.
Best regards.
Jose Sierra
On 07/03/2013 14:56, Ivan Shcheklein wrote:
Jose, I can't reproduce your problem exactly. Can you send us
event logs?
On Wed, Mar 6, 2013 at 8:51 PM, Jose Sierra
<jose.sie...@integromics.com
<mailto:jose.sie...@integromics.com>> wrote:
Hello.
I am working with sedna 3.5.161, storing the files in different
collections. some of the files has a big size, and when i
delete them,
all the other queries/transactions are locked and they don“t
run even if
i am consulting/working with other collections. Now to delete
i am using
the drop document in collection sentence. Exists some other
way more
efficient to delete document or locking only the collection
when i am
deleting the resource instead all the database?
Best regards.
Jose Sierra
------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The
Forrester
Wave(TM): Endpoint Security, Q1 2013 and "remains a good
choice" in the
endpoint security space. For insight on selecting the right
partner to
tackle endpoint security challenges, access the full report.
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
Sedna-discussion mailing list
Sedna-discussion@lists.sourceforge.net
<mailto:Sedna-discussion@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/sedna-discussion
------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire
the most talented Cisco Certified professionals. Visit the
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html
_______________________________________________
Sedna-discussion mailing list
Sedna-discussion@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sedna-discussion