Opened 11 years ago
Closed 11 years ago
#21170 closed Bug (needsinfo)
Clearing DatabseCache doesn't work with Oracle backend.
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Core (Cache system) | Version: | 1.6-beta-1 |
Severity: | Normal | Keywords: | |
Cc: | Shai Berger | Triage Stage: | Accepted |
Has patch: | no | Needs documentation: | no |
Needs tests: | yes | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I have one row in my oracle cache table. I'm trying to clear it using standard django way:
from django.core.cache import cache cache.clear()
But it doesn't work! The row is still in my cache table.
So I run python manage.py sell and put some code from DatabaseCache.clear() method:
from django.db import connections table = connections['cache'].ops.quote_name('ws_cache_table') cursor = connections['cache'].cursor() cursor.execute('DELETE FROM %s' % table)
But it doesn't work either...
I don't get any exceptions thrown, my 'cache' connection is configured correctly in settings.py.
When I open SQL Developer and put
DELETE FROM ws_cache_table
Table gets truncated correctly.
On the other hand, when I add:
connections['cache'].commit()
I get exception django.db.transaction.TransactionManagementError: This code isn't under transaction management thrown but the table is truncated now.
Change History (6)
comment:1 by , 11 years ago
comment:3 by , 11 years ago
Yes, I think so. Adding tests might be a good idea so that we could actually verify that this works in 1.6 & master.
comment:4 by , 11 years ago
Needs tests: | set |
---|---|
Triage Stage: | Unreviewed → Accepted |
Version: | 1.5 → 1.6-beta-1 |
Marking as accepted. Only tests should be needed. Lets not worry about fixing this in 1.5.
comment:5 by , 11 years ago
Cc: | added |
---|
Which tests would these be?
There is a test for clearing the cache in tests/cache/tests.py
, it is run also with a DBCache
backend, and so is also run with Oracle whenever we run the full test suite -- which, AFAICT, currently passes for Oracle on 1.6 and master.
As far as I understand, there is nothing to solve here for Django>=1.6.
comment:6 by , 11 years ago
Resolution: | → needsinfo |
---|---|
Status: | new → closed |
So we're not fixing for pre-1.6; and there seems to be no problem for 1.6 and up.
If anyone sees a problem, or even wants to add a test for 1.6, feel free to reopen.
Weirdness of old Django transaction management is the reason for the last error. You get exception and the commit both in one call. You can use commit_unless_managed() to just get a commit.
To me it seems that every writing operation should to commit_unless_managed() in 1.5.
1.6 should work automatically - either you are in autocommit mode which means every operation is committed automatically, or you are inside an atomic block in which case the transaction is going to be committed at the end of the block.