diff options
author | dhanvey <dhanvey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2002-09-28 17:02:18 +0000 |
---|---|---|
committer | dhanvey <dhanvey@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2002-09-28 17:02:18 +0000 |
commit | d90edd4f5244f2a4762d83ac5e5139b68c613da0 (patch) | |
tree | 93919d174aa496b311b2767583e8676a4506fe93 /TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp | |
parent | 7174e60931c683eb6f1718430b2d18f9fd1de816 (diff) | |
download | ATCD-d90edd4f5244f2a4762d83ac5e5139b68c613da0.tar.gz |
*** empty log message ***
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp')
-rw-r--r-- | TAO/orbsvcs/orbsvcs/Log/LogRecordStore.cpp | 43 |
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 */ |