=46rom=204bbfe9255bf401565be20dbe3867dd8e98d381c3=20Mon=20Sep=2017=20=
00:00:00=202001=0AFrom:=20Sanjit=20Jhala=20<sjhalaz@gmail.com>=0ADate:=20=
Tue,=2014=20Jul=202009=2017:07:48=20-0700=0ASubject:=20[PATCH]=20Fixed=20=
bug=20in=20CommitLog=20that=20was=20causing=20some=20fragments=20to=20=
get=20dropped=20incorrectly.=0A=0A---=0A=20=
.../MaintenancePrioritizerLogCleanup.cc=20=20=20=20=20=20=20=20=20=20=20=20=
|=20=20=20=208=20++++----=0A=20=
.../Hypertable/RangeServer/MaintenanceScheduler.cc=20|=20=20=2017=20=
++++++++++++-----=0A=202=20files=20changed,=2016=20insertions(+),=209=20=
deletions(-)=0A=0Adiff=20--git=20=
a/src/cc/Hypertable/RangeServer/MaintenancePrioritizerLogCleanup.cc=20=
b/src/cc/Hypertable/RangeServer/MaintenancePrioritizerLogCleanup.cc=0A=
index=208d6b3fd..5a0455f=20100644=0A---=20=
a/src/cc/Hypertable/RangeServer/MaintenancePrioritizerLogCleanup.cc=0A=
+++=20=
b/src/cc/Hypertable/RangeServer/MaintenancePrioritizerLogCleanup.cc=0A@@=20=
-91,7=20+91,7=20@@=20=
MaintenancePrioritizerLogCleanup::assign_priorities(RangeStatsVector=20=
&stats,=0A=20=20=20int64_t=20disk_total,=20mem_total;=0A=20=0A=20=20=20=
log->load_cumulative_size_map(cumulative_size_map);=0A-=20=20=0A+=0A=20=20=
=20for=20(size_t=20i=3D0;=20i<stats.size();=20i++)=20{=0A=20=0A=20=20=20=20=
=20if=20(stats[i]->busy)=0A@@=20-151,7=20+151,7=20@@=20=
MaintenancePrioritizerLogCleanup::assign_priorities(RangeStatsVector=20=
&stats,=0A=20=20=20=20=20=20=20=20=20=20=20=
ag_data->ag->set_compaction_bit();=0A=20=20=20=20=20=20=20=20=20=20=20=
mem_total=20+=3D=20ag_data->mem_used;=0A=20=20=20=20=20=20=20=20=20}=0A-=20=
=20=20=20=20=20=20=20=0A+=0A=20=20=20=20=20=20=20}=0A=20=20=20=20=20=20=20=
else=0A=20=20=20=20=20=20=20=20=20trace_str=20+=3D=20String("STAT=20")=20=
+=20ag_data->ag->get_full_name()+"=20cumulative_size=20"=0A@@=20-166,7=20=
+166,7=20@@=20=
MaintenancePrioritizerLogCleanup::assign_priorities(RangeStatsVector=20=
&stats,=0A=20=20=20=20=20if=20(!stats[i]->range->is_root())=20{=0A=20=20=20=
=20=20=20=20if=20(stats[i]->table_id=20=3D=3D=200=20&&=20=
Global::range_metadata_split_size=20!=3D=200)=20{=0A=20=20=20=20=20=20=20=
=20=20if=20(disk_total=20>=3D=20Global::range_metadata_split_size)=20{=0A=
-=20=20=20=20=20=20=20=20=20=20HT_INFOF("Adding=20maintenance=20for=20=
range=20%s=20because=20dist_total=20%d=20exceeds=20%d",=0A+=20=20=20=20=20=
=20=20=20=20=20HT_INFOF("Adding=20maintenance=20for=20range=20%s=20=
because=20disk_total=20%d=20exceeds=20%d",=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20stats[i]->range->get_name().c_str(),=20=
(int)disk_total,=20(int)Global::range_metadata_split_size);=0A=20=20=20=20=
=20=20=20=20=20=20=20stats[i]->priority=20=3D=202000=20+=20=
Math::log2(mem_total);=0A=20=20=20=20=20=20=20=20=20=20=20=
stats[i]->maintenance_type=20=3D=20Range::SPLIT;=0A@@=20-174,7=20+174,7=20=
@@=20=
MaintenancePrioritizerLogCleanup::assign_priorities(RangeStatsVector=20=
&stats,=0A=20=20=20=20=20=20=20}=0A=20=20=20=20=20=20=20else=20{=0A=20=20=
=20=20=20=20=20=20=20if=20(disk_total=20>=3D=20Global::range_split_size)=20=
{=0A-=20=20=20=20=20=20=20=20=20=20HT_INFOF("Adding=20maintenance=20for=20=
range=20%s=20because=20dist_total=20%d=20exceeds=20%d",=0A+=20=20=20=20=20=
=20=20=20=20=20HT_INFOF("Adding=20maintenance=20for=20range=20%s=20=
because=20disk_total=20%d=20exceeds=20%d",=0A=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20stats[i]->range->get_name().c_str(),=20=
(int)disk_total,=20(int)Global::range_split_size);=0A=20=20=20=20=20=20=20=
=20=20=20=20stats[i]->priority=20=3D=201000=20+=20Math::log2(mem_total);=0A=
=20=20=20=20=20=20=20=20=20=20=20stats[i]->maintenance_type=20=3D=20=
Range::SPLIT;=0Adiff=20--git=20=
a/src/cc/Hypertable/RangeServer/MaintenanceScheduler.cc=20=
b/src/cc/Hypertable/RangeServer/MaintenanceScheduler.cc=0Aindex=20=
4c408e3..6c55cde=20100644=0A---=20=
a/src/cc/Hypertable/RangeServer/MaintenanceScheduler.cc=0A+++=20=
b/src/cc/Hypertable/RangeServer/MaintenanceScheduler.cc=0A@@=20-86,9=20=
+86,16=20@@=20void=20MaintenanceScheduler::schedule()=20{=0A=20=20=20=20=
*=20Purge=20commit=20log=20fragments=0A=20=20=20=20*/=0A=20=20=20{=0A-=20=
=20=20=20int64_t=20revision_root=20=20=20=20=20=3D=20TIMESTAMP_MAX;=0A-=20=
=20=20=20int64_t=20revision_metadata=20=3D=20TIMESTAMP_MAX;=0A-=20=20=20=20=
int64_t=20revision_user=20=20=20=20=20=3D=20TIMESTAMP_MAX;=0A+=20=20=20=20=
int64_t=20revision_user;=0A+=20=20=20=20int64_t=20revision_metadata;=0A+=20=
=20=20=20int64_t=20revision_root;=0A+=0A+=20=20=20=20(Global::user_log=20=
!=3D0)=20?=0A+=20=20=20=20=20=20=20=20revision_user=20=3D=20=
Global::user_log->get_latest_revision()=20:=20TIMESTAMP_MIN;=0A+=20=20=20=
=20(Global::metadata_log=20!=3D0)=20?=0A+=20=20=20=20=20=20=20=20=
revision_metadata=20=3D=20Global::metadata_log->get_latest_revision()=20=
:=20TIMESTAMP_MIN;=0A+=20=20=20=20(Global::root_log=20!=3D0)=20?=0A+=20=20=
=20=20=20=20=20=20revision_root=20=3D=20=
Global::root_log->get_latest_revision()=20:=20TIMESTAMP_MIN;=0A=20=0A=20=20=
=20=20=20for=20(size_t=20i=3D0;=20i<range_data.size();=20i++)=20{=0A=20=20=
=20=20=20=20=20for=20(ag_data=20=3D=20range_data[i]->agdata;=20ag_data;=20=
ag_data=20=3D=20ag_data->next)=20{=0A@@=20-117,7=20+124,7=20@@=20void=20=
MaintenanceScheduler::schedule()=20{=0A=20=0A=20=20=20=20=20if=20=
(Global::metadata_log)=0A=20=20=20=20=20=20=20=
Global::metadata_log->purge(revision_metadata);=0A-=20=20=20=20=0A+=0A=20=
=20=20=20=20if=20(Global::user_log)=0A=20=20=20=20=20=20=20=
Global::user_log->purge(revision_user);=0A=20=20=20}=0A@@=20-140,7=20=
+147,7=20@@=20void=20MaintenanceScheduler::schedule()=20{=0A=20=20=20=20=20=
=20=20=20=20RangePtr=20range(range_data[i]->range);=0A=20=20=20=20=20=20=20=
=20=20Global::maintenance_queue->add(new=20=
MaintenanceTaskSplit(schedule_time,=20range));=0A=20=20=20=20=20=20=20}=0A=
-=20=20=20=20}=20=20=20=20=0A+=20=20=20=20}=0A=20=20=20=20=20=
m_initialized=20=3D=20true;=0A=20=20=20}=0A=20=20=20else=20{=0A--=20=0A=
1.6.0.2=0A=0A=
