summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp
diff options
context:
space:
mode:
authordhanvey <dhanvey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-09-28 17:02:18 +0000
committerdhanvey <dhanvey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-09-28 17:02:18 +0000
commitd90edd4f5244f2a4762d83ac5e5139b68c613da0 (patch)
tree93919d174aa496b311b2767583e8676a4506fe93 /TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp
parent7174e60931c683eb6f1718430b2d18f9fd1de816 (diff)
downloadATCD-d90edd4f5244f2a4762d83ac5e5139b68c613da0.tar.gz
*** empty log message ***
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp43
1 files changed, 34 insertions, 9 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp b/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp
index 1d1b824065b..f32b47be622 100644
--- a/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp
+++ b/TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp
@@ -1,16 +1,16 @@
-// $Id$
-
+/* -*- C++ -*- $Id$ */
#include "orbsvcs/Time_Utilities.h"
#include "orbsvcs/Log/LogRecordStore.h"
#include "orbsvcs/Log/Log_Constraint_Interpreter.h"
#include "orbsvcs/Log/Log_Constraint_Visitors.h"
-
LogRecordStore::LogRecordStore (CORBA::ULongLong max_size,
+ DsLogAdmin::LogId logid,
CORBA::ULong max_rec_list_len)
: maxid_ (0),
max_size_ (max_size),
+ logid_ (logid),
current_size_ (0),
num_records_ (0),
max_rec_list_len_ (max_rec_list_len)
@@ -25,7 +25,7 @@ LogRecordStore::~LogRecordStore (void)
int
LogRecordStore::open (void)
-{
+{
return rec_hash_.open ();
}
@@ -67,7 +67,8 @@ int
LogRecordStore::log (DsLogAdmin::LogRecord &rec)
{
// Check if we are allowed to write...
- if (max_size_ !=0 && current_size_ >= max_size_)
+
+ if (max_size_ !=0 && (current_size_ + sizeof (rec)) >= max_size_)
return 1; // return code for log rec. full
// Initialize a couple of fields first...
@@ -78,7 +79,6 @@ LogRecordStore::log (DsLogAdmin::LogRecord &rec)
ORBSVCS_Time::Time_Value_to_TimeT(rec.time,ACE_OS::gettimeofday());
-
// First, bind the id to the LogRecord in the hash_map
if (this->rec_hash_.bind (rec.id, rec) != 0)
{
@@ -134,17 +134,40 @@ LogRecordStore::remove (DsLogAdmin::RecordId id)
this->current_size_ =
this->current_size_ - sizeof (rec);
// TODO: return ids to a reuse list.
+
return 0;
}
int
LogRecordStore::purge_old_records (void)
{
- // TBD:
- // Delete 5% of the old records.
- return -1;
+ CORBA::ULongLong num_records_to_purge = (this->num_records_) * ( (CORBA::ULongLong) 5 / (CORBA::ULongLong)100 );
+
+ if (num_records_to_purge < 1)
+ num_records_to_purge = 1;
+
+ LOG_RECORD_STORE_ITER iter (rec_hash_);
+ LOG_RECORD_HASH_MAP_ENTRY *hash_entry;
+ CORBA::ULong count = 0; // count of matches found.
+
+ if (num_records_to_purge > 0 )
+ {
+ for (CORBA::ULong i = 0; i < num_records_to_purge; ++i)
+ {
+ if (iter.next (hash_entry) == -1 || iter.advance () == -1)
+ {
+ break;
+ }
+
+ if (this->remove (hash_entry->int_id_.id) == 0)
+ count++;
+ }
+ }
+ return count;
}
+
+
LogRecordStore::LOG_RECORD_STORE&
LogRecordStore::get_storage (void)
{
@@ -165,6 +188,7 @@ template class ACE_Hash_Map_Iterator_Base_Ex<DsLogAdmin::RecordId, DsLogAdmin::L
template class ACE_Hash_Map_Reverse_Iterator<DsLogAdmin::RecordId,DsLogAdmin::LogRecord,ACE_Null_Mutex>;
template class ACE_Hash_Map_Reverse_Iterator_Ex<DsLogAdmin::RecordId, DsLogAdmin::LogRecord, ACE_Hash<DsLogAdmin::RecordId>,
ACE_Equal_To<DsLogAdmin::RecordId>, ACE_Null_Mutex>;
+template class ACE_Equal_To<DsLogAdmin::RecordId>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
@@ -180,5 +204,6 @@ ACE_Equal_To<DsLogAdmin::RecordId>, ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Reverse_Iterator<DsLogAdmin::RecordId,DsLogAdmin::LogRecord,ACE_Null_Mutex>
#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<DsLogAdmin::RecordId, DsLogAdmin::LogRecord, ACE_Hash<DsLogAdmin::RecordId>,
ACE_Equal_To<DsLogAdmin::RecordId>, ACE_Null_Mutex>
+#pragma instantiate ACE_Equal_To<DsLogAdmin::RecordId>
#endif /* ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA */