Opened 18 years ago

Closed 18 years ago

Last modified 18 years ago

#149 closed defect (released)

erroneous flush() call made to read-only remote DB

Reported by: Mark Hammond Owned by: Olly Betts
Priority: normal Milestone:
Component: Backend-Remote Version: SVN trunk
Severity: normal Keywords:
Cc: Blocked By:
Blocking: #120, #154 Operating System: All

Description

  • Start a read-only tcp server on (say) port 8100
  • Execute 'python -c "import xapian;xapian.remote_open('localhost', 8100)"
  • You will see a message logged at the server:

Got exception NetworkError: Server is read-only

It turns out this is a flush() call being made as the client's 'Database' object is destructing - specifically, the flush is in 'Database::Internal::dtor_called'.

This happens as the database is destructing, so the connection is already being closed. The error doing the flush() is caught and ignored - so as far as I know, this is purely a cosmetic issue (but one that might cause concern)

Change History (6)

comment:1 by Mark Hammond, 18 years ago

Blocking: 120 added

comment:2 by Olly Betts, 18 years ago

Status: newassigned

I've changed this error to be InvalidOperationError, which avoids the worrying message.

The code in dtor_called() still should be sorted out somehow though.

comment:3 by Olly Betts, 18 years ago

Blocking: 154 added; 120 removed

I think I saw a way to easily fix this (essentially mark transactions as "UNSUPPORTED" for a read-only database, which is true really). So marking this for 1.0.1.

comment:4 by Olly Betts, 18 years ago

Blocking: 120 added

On second thoughts, keep blockage on 120 as well as adding 154 as that seems the more logical approach. Sorry for the extra bug spam.

comment:5 by Olly Betts, 18 years ago

Resolution: fixed
Status: assignedclosed

I've just committed a fix to SVN HEAD.

comment:6 by Olly Betts, 18 years ago

Operating System: All
Resolution: fixedreleased

Fixed in 1.0.1.

Note: See TracTickets for help on using tickets.