summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorLuis Fernando Muñoz Mejías <Luis.Fernando.Munoz.Mejias@cern.ch>2009-04-28 21:14:53 +0200
committerRainer Gerhards <rgerhards@adiscon.com>2009-04-29 17:10:19 +0200
commit9823c73d1d07e50e6bec7f7c02c88d61d6955526 (patch)
treefe45b83508fb906ae79163849b5d62937ad39b88 /plugins
parentc35ce31aed4d873ed9564332374fbf82d7ff187d (diff)
downloadrsyslog-9823c73d1d07e50e6bec7f7c02c88d61d6955526.tar.gz
rsyslog-9823c73d1d07e50e6bec7f7c02c88d61d6955526.tar.xz
rsyslog-9823c73d1d07e50e6bec7f7c02c88d61d6955526.zip
Make it recover from errors on insertions.
If the database rejected some entry, making the statement fail on it, the batch was not cleaned and the same values were retried over and over, causing a cascade of failures and a denial of service. We use now OCI_BATCH_ERRORS so that everything valid in the batch is inserted, and rejected values can be discarded.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/omoracle/omoracle.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/plugins/omoracle/omoracle.c b/plugins/omoracle/omoracle.c
index d1b3b955..331b7dd4 100644
--- a/plugins/omoracle/omoracle.c
+++ b/plugins/omoracle/omoracle.c
@@ -342,13 +342,12 @@ static int insert_to_db(instanceData* pData)
OCIStmtExecute(pData->service,
pData->statement,
pData->error,
- pData->batch.n, 0, NULL, NULL, OCI_DEFAULT));
+ pData->batch.n, 0, NULL, NULL,
+ OCI_BATCH_ERRORS));
- CHECKERR(pData->error,
- OCITransCommit(pData->service, pData->error, 0));
-
- pData->batch.n = 0;
finalize_it:
+ pData->batch.n = 0;
+ OCITransCommit(pData->service, pData->error, 0);
dbgprintf ("omoracle insertion to DB %s\n", iRet == RS_RET_OK ?
"succeeded" : "did not succeed");
RETiRet;