On 14/03/14 09:39, Ian Emmons wrote:
I am porting our triple store (Parliament) from Joseki to Fuseki,
and  I have a question. How do I shut Fuseki down gracefully? On *nix
systems, of course, the JVM responds to the TERM signal, and so this works:

    kill `ps -ef | grep 'java.*fuseki' | grep -v grep | awk '{ print $2 }'`

fuseki stop

is more graceful and it knows the Fuseki process id.

But "kill -9" is fine.

However, there are two problems with this. First, it doesn’t work on
> Windows, where the only similar actions are decidedly ungraceful. This
is a big problem, because Windows is important to our customers.

Second, even on *nix systems this doesn’t result in a graceful
shutdown, because the close method on my DataSet is never called. I
realize that this is less of a problem for TDB datasets (because of
transactions) and no problem for in-memory DataSets, but some stores
(like ours) need this hook to ensure that pending file writes are
flushed to disk. And even for a transactional store like TDB, it seems
to me that you would want to avoid unnecessary file recoveries.

Any system needs to cope with unexpected crashes because they happen, for better or worse. So it needs to cope with "kill -9" and if you believe that works, you might as well use it. It's the principle of trusting the code.

(TDB file recovery happens on TDB start-up anyway because TDB is ACID.)

I did try enabling the management server and issuing this command:

    http://localhost:58080/mgt?cmd=shutdown

(Caution - old version)

An explicit graceful shutdown could be done but can't be guaranteed - it's not going to work for WAR deployment or init.d very well. Or machine crashes, loss of network, accidental "upgrades" and all the other stuff that happen outside the JVM.

The new mgt subsystem architecture has been clarified and more amenable to extension.

        Andy

This resulted in the following response, but no shutdown happened:

    Software:
      Fuseki 1.0.1
      TDB 1.0.1
      ARQ 2.11.1
      Apache Jena - Core 2.11.1

    Name = data
       Query           :: /data/query
       Update          :: /data/update
       Upload          :: /data/upload
       Graphs(Read)    :: /data/get
       Graphs(RW)      :: /data/data

So, how should I gracefully shut down Fuseki, and is there a way to ensure that 
my DataSet is closed?

Thanks,

Ian


Reply via email to