Hi,

The first round of tests looks good. We'll try it in production and see how
it responds with multiple users.

The only issue (warning not error) I got was when trying to open a file if
the server is busy with a process. The message is :

[qtp1635546341-17] WARN com.bradmcevoy.http.LockInfo - resource is being
locked with a null user. This won't really be locked at all...

org.basex.query.QueryIOException: Cannot convert empty-sequence() to
xs:string: $owner := ().

at org.basex.http.webdav.WebDAVQuery.execute(WebDAVQuery.java:122)

at org.basex.http.webdav.WebDAVLockService.lock(WebDAVLockService.java:74)

at org.basex.http.webdav.WebDAVResource$4.get(WebDAVResource.java:138)

at org.basex.http.webdav.WebDAVResource$4.get(WebDAVResource.java:1)

at org.basex.http.webdav.WebDAVCode.eval(WebDAVCode.java:37)

at org.basex.http.webdav.WebDAVCode.evalNoEx(WebDAVCode.java:53)

at org.basex.http.webdav.WebDAVResource.lock(WebDAVResource.java:153)

at
com.bradmcevoy.http.webdav.LockHandler.processNewLock(LockHandler.java:225)

at
com.bradmcevoy.http.webdav.LockHandler.processExistingResource(LockHandler.java:110)

at com.bradmcevoy.http.webdav.LockHandler.process(LockHandler.java:86)

at com.bradmcevoy.http.StandardFilter.process(StandardFilter.java:52)

at com.bradmcevoy.http.FilterChain.process(FilterChain.java:40)

at com.bradmcevoy.http.HttpManager.process(HttpManager.java:228)

at org.basex.http.webdav.WebDAVServlet.run(WebDAVServlet.java:34)

at org.basex.http.BaseXServlet.service(BaseXServlet.java:59)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:856)

at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535)

at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)

at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)

at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)

at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)

at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)

at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)

at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)

at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)

at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)

at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)

at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)

at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)

at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)

at org.eclipse.jetty.server.Server.handle(Server.java:531)

at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)

at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)

at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)

at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)

at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)

at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:319)

at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:175)

at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:133)

at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)

at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:754)

at
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:672)

at java.lang.Thread.run(Thread.java:745)

Caused by: org.basex.query.QueryException: Cannot convert empty-sequence()
to xs:string: $owner := ().

at org.basex.query.QueryError.get(QueryError.java:1392)

at org.basex.query.QueryError.typeError(QueryError.java:1575)

at org.basex.query.value.type.SeqType.promote(SeqType.java:381)

at org.basex.query.var.Var.checkType(Var.java:191)

at org.basex.query.expr.gflwor.Let.optimize(Let.java:94)

at org.basex.query.func.StaticFunc.inlineExpr(StaticFunc.java:286)

at org.basex.query.func.StaticFuncCall.compile(StaticFuncCall.java:68)

at org.basex.query.scope.MainModule.comp(MainModule.java:83)

at org.basex.query.QueryCompiler.compile(QueryCompiler.java:114)

at org.basex.query.QueryCompiler.compile(QueryCompiler.java:105)

at org.basex.query.QueryContext.compile(QueryContext.java:302)

at org.basex.query.QueryContext.iter(QueryContext.java:321)

at org.basex.query.QueryProcessor.iter(QueryProcessor.java:90)

at org.basex.query.QueryProcessor.value(QueryProcessor.java:99)

at org.basex.http.webdav.WebDAVQuery.execute(WebDAVQuery.java:116)

... 44 more

But no more duplicate and no more lock message.

On Fri, May 18, 2018 at 2:15 PM, Christian Grün <[email protected]>
wrote:

> I believe we have fixed the reported issue. Furthermore, we didn’t
> manage to trigger any of the exceptions (EOF, etc.) anymore. The new
> snapshot is available.
>
> Cheers,
> Christian
>
>
>
> On Fri, May 18, 2018 at 2:08 PM, France Baril
> <[email protected]> wrote:
> > Awesome, any progress is good. We've been dealing with that lock issue
> for
> > the longest time, but it took a while to figure out how to replicate it
> > systematically. It was always so random. I'll see with the client when we
> > can upgrade and will let you know how it goes.
> >
> > On Thu, May 17, 2018 at 9:05 PM, Christian Grün <
> [email protected]>
> > wrote:
> >>
> >> Hi France,
> >>
> >> Some updates:
> >>
> >> • I fixed the locking bug that caused a null pointer exception.
> >>
> >> • As you probably know, the WebDAV locks were organized in an
> >> additional ~webdav database on disk. I decided to change this quite
> >> fundamentally: From now on, the locks will be kept in main-memory.
> >> Locks will get lost if BaseX is restarted (but I expect this to rarely
> >> happen in productive environments).
> >>
> >> • The good news is that the oXygen WebDAV explorer will be much faster
> >> now! I noticed that 50.000 internal log checks were performed with
> >> oXygen. This didn’t happen with other WebDAV clients.
> >>
> >> I’d be pleased if you could check out the latest snapshot [1] and give
> >> me an update if it works as expected. The actual problem you reported
> >> has not been fixed yet, but I’m positive that things are clearing up.
> >>
> >> Best,
> >> Christian
> >>
> >> [1] http://files.basex.org/releases/latest/
> >>
> >>
> >>
> >> On Thu, May 17, 2018 at 5:42 PM, Christian Grün
> >> <[email protected]> wrote:
> >> > Hi France,
> >> >
> >> > The delay for retrieving the file list seems to be oXygen-specific:
> >> > BaseX itself requires appr. 1 second to create a list of the 50.000
> >> > files, but it takes around 180 seconds until the resources are
> >> > displayed in the oXygen WebDAV explorer. I tried another WebDAV
> >> > implementation: With the WebDAV plugin of the windows application
> >> > TotalCommander, the files are listed after 3 seconds.
> >> >
> >> > But back to your original question: My troubles started when I tried
> >> > to open and close a file with oXygen (version 20): If I open a single
> >> > resource, a NullPointerException is output by BaseX (on command line).
> >> > If I close the file and try to reopen it, oXygen returns 500 (“Problem
> >> > while trying to acquire lock”).
> >> >
> >> > Do you experience a similar behavior? Which versions of BaseX and
> >> > oXygen are you currently working with?
> >> >
> >> > Unfortunately, the WebDAV protocol has been causing problems since the
> >> > very beginning we implemented it. This is on the one hand due to the
> >> > outdated library we use, on the other hand to the protocol itself
> >> > (each WebDAV client seems to use it differently). Maybe you could have
> >> > a look at Axxepta’s Argon Author plugin for oXygen:
> >> >
> >> >   http://argon-author.com/
> >> >
> >> > Best,
> >> > Christian
> >> >
> >> >
> >> >
> >> > On Thu, May 17, 2018 at 10:55 AM, France Baril
> >> > <[email protected]> wrote:
> >> >> Perfect, happy we could finally find a way to get this issue
> >> >> replicated!.
> >> >>
> >> >> We only have one DB with more than 1000 files, so display speed is
> not
> >> >> much
> >> >> of an issue. We'd be happy to get speed anyway :-). The 50,000 files
> >> >> were
> >> >> just to make the bug easy to replicate.
> >> >>
> >> >> On Wed, May 16, 2018 at 4:04 PM, Christian Grün
> >> >> <[email protected]>
> >> >> wrote:
> >> >>>
> >> >>> Dear France,
> >> >>>
> >> >>> A first update:
> >> >>>
> >> >>> I noticed that the oXygen file access while updating the database
> >> >>> causes various exceptions (which are written to the BaseX logs). As
> a
> >> >>> result, I also get duplicate files in the database. I will try to
> find
> >> >>> out if this is something we can resolve, or if it goes back to thev
> >> >>> Milton WebDAV library we use.
> >> >>>
> >> >>> A minor info: You can speed up the duplicates lookup by using group
> >> >>> by:
> >> >>>
> >> >>>   let $duplicates := (
> >> >>>     for $file-group in db:list('mydb')
> >> >>>     group by $path := string($file-group)
> >> >>>     let $count := count($file-group)
> >> >>>     where $count > 1
> >> >>>     return <li>There are { $count } instances of { $path }.</li>
> >> >>>   )
> >> >>>   return
> >> >>>     if ($duplicates)
> >> >>>     then <ul> { $duplicates }</ul>
> >> >>>     else <p>All is good. No duplicate found.</p>
> >> >>>
> >> >>> Apart from that, I noticed that it takes a very long time to list
> the
> >> >>> 50.000 files in oXygen. Yet another issues that may be due to the
> >> >>> restrictions of WebDAV; but I’ll see if something can be done in
> BaseX
> >> >>> to get this accelerated.
> >> >>>
> >> >>> Best,
> >> >>> Christian
> >> >>>
> >> >>>
> >> >>>
> >> >>>
> >> >>> On Sun, May 13, 2018 at 3:36 PM, France Baril
> >> >>> <[email protected]> wrote:
> >> >>> > Hi,
> >> >>> >
> >> >>> > Just wondering if this slipped through the cracks.
> >> >>> >
> >> >>> > On Wed, May 2, 2018 at 1:11 PM, France Baril
> >> >>> > <[email protected]>
> >> >>> > wrote:
> >> >>> >>
> >> >>> >> Hi,
> >> >>> >>
> >> >>> >> We've been having this issue for a while and we think resolving
> it
> >> >>> >> may
> >> >>> >> be
> >> >>> >> the key to resolving an intermittent server 500 error that we've
> >> >>> >> been
> >> >>> >> having.
> >> >>> >>
> >> >>> >> When a user tries to save a file while a batch process is
> running,
> >> >>> >> BaseX
> >> >>> >> saves duplicates of the file.
> >> >>> >>
> >> >>> >> How to reproduce:
> >> >>> >>
> >> >>> >> 1) Take a fresh BaseX 9.0.1 installation
> >> >>> >> 2) Copy the attached .xqm in webapp
> >> >>> >> 3) Create an empty DB called mydb
> >> >>> >> 4) Access localhost:port-num/test/create-update-a-lot-of-files
> to
> >> >>> >> populate
> >> >>> >> your db.
> >> >>> >> 5) In OxygenXML, set a webdav connection to the db and open a
> file,
> >> >>> >> add
> >> >>> >> a
> >> >>> >> character in one of the elements, but don't save the file.
> >> >>> >> 6) From the browser, access
> >> >>> >> 'localhost:port-num/test/update-something'
> >> >>> >> 7) While the process in the browser is still running, save the
> file
> >> >>> >> in
> >> >>> >> Oxygen. You'll get a message saying that read timed out. Click ok
> >> >>> >> and
> >> >>> >> do not
> >> >>> >> try saving the file again.
> >> >>> >> 8) When the update-something process is done running, don't
> resave
> >> >>> >> the
> >> >>> >> file in Oxygen, instead go to
> >> >>> >> localhost:port-num/test/oups-duplicates.
> >> >>> >>    You'll get a message saying that some files are duplicated. If
> >> >>> >> you
> >> >>> >> don't try again from step #4 a few times. You'll only get
> >> >>> >> duplicates if
> >> >>> >> you
> >> >>> >> get the time out message before the update-something process is
> >> >>> >> still
> >> >>> >> running. If you try to save the file many times, you'll get more
> >> >>> >> duplicates,
> >> >>> >> 4 or 6.
> >> >>> >>
> >> >>> >> We're not sure if it's a BaseX bug or if we are setting our user
> >> >>> >> management and/or locking rules incorrectly.
> >> >>> >>
> >> >>> >> Do you have any suggestions?
> >> >>> >>
> >> >>> >> --
> >> >>> >> France Baril
> >> >>> >> Architecte documentaire / Documentation architect
> >> >>> >> [email protected]
> >> >>> >
> >> >>> >
> >> >>> >
> >> >>> >
> >> >>> > --
> >> >>> > France Baril
> >> >>> > Architecte documentaire / Documentation architect
> >> >>> > [email protected]
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> France Baril
> >> >> Architecte documentaire / Documentation architect
> >> >> [email protected]
> >
> >
> >
> >
> > --
> > France Baril
> > Architecte documentaire / Documentation architect
> > [email protected]
>



-- 
France Baril
Architecte documentaire / Documentation architect
[email protected]

Reply via email to