package Ġapp . cash . back fil a . client . mis k . dynamodb . internal Ċ Ċ import Ġapp . cash . back fil a . client . mis k . dynamodb . D ynamo Db Back fill Ċ import Ġapp . cash . back fil a . client . mis k . spi . Back fil a Parameters Operator Ċ import Ġapp . cash . back fil a . client . mis k . spi . Back fill Operator Ċ import Ġapp . cash . back fil a . protos . client service . GetNext Batch Range Request Ċ import Ġapp . cash . back fil a . protos . client service . GetNext Batch Range Response Ċ import Ġapp . cash . back fil a . protos . client service . Prepare Back fill Request Ċ import Ġapp . cash . back fil a . protos . client service . Prepare Back fill Response Ċ import Ġapp . cash . back fil a . protos . client service . Run Batch Request Ċ import Ġapp . cash . back fil a . protos . client service . Run Batch Response Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Mapper Ċ import Ġcom . amazonaws . services . dynamodb v 2 . data modeling . D ynamoDB Scan Expression Ċ import Ġcom . amazonaws . services . dynamodb v 2 . model . AttributeValue Ċ Ċ class ĠD ynamo Db Back fill Operator < I Ġ: ĠAny , ĠP Ġ: ĠAny >( ĊĠ Ġval Ġd ynamo Db : ĠD ynamoDB Mapper , ĊĠ Ġoverride Ġval Ġback fill : ĠD ynamo Db Back fill < I , ĠP >, ĊĠ Ġval Ġparameters Operator : ĠBack fil a Parameters Operator < P > Ċ ) Ġ: ĠBack fill Operator Ġ{ ĊĠ Ġoverride Ġfun Ġname (): ĠString Ġ= Ġback fill . java Class . toString () ĊĊĠ Ġoverride Ġfun Ġprepare Back fill ( request : ĠPrepare Back fill Request ): ĠPrepare Back fill Response Ġ{ ĊĠĠĠ Ġval Ġconfig Ġ= ĊĠĠĠĠĠĠĠ Ġparameters Operator . construct Back fill Config ( request . parameters , Ġrequest . dry _ run ) ĊĠĠĠ Ġ// ĠTODO ( mike p aw ): Ġdynamically Ġselect Ġthe Ġsegment Ġcount Ġby Ġprob ing ĠD ynamoDB . ĊĠĠĠ Ġval Ġsegment Count Ġ= Ġback fill . fixed Segment Count ( config ) Ġ?: Ġ 2 0 4 8 ĊĠĠĠ Ġval Ġpartition Count Ġ= Ġback fill . partition Count ( config ) ĊĠĠĠ Ġval Ġsegments Per Partition Ġ= Ġsegment Count Ġ/ Ġpartition Count ĊĊĠĠĠ Ġval Ġpartitions Ġ= Ġmutable ListOf < Prepare Back fill Response . Partition >() ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpartition Count ) Ġ{ ĊĠĠĠĠĠ Ġval Ġsegment Start Inclusive Ġ= Ġi Ġ* Ġsegments Per Partition ĊĠĠĠĠĠ Ġval Ġsegment End Exclusive Ġ= Ġ( i Ġ+ Ġ 1 ) Ġ* Ġsegments Per Partition ĊĠĠĠĠĠ Ġpartitions Ġ+= ĠPrepare Back fill Response . Partition . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. partition _ name ("$ i Ġof Ġ$ partition Count ") ĊĠĠĠĠĠĠĠĠĠ Ġ. back fill _ range ( encode Key Range ( segment Start Inclusive , Ġsegment End Exclusive , Ġsegment Count )) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠPrepare Back fill Response . Builder () ĊĠĠĠĠĠĠĠ Ġ. partitions ( partitions ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetNext Batch Range ( request : ĠGet Next Batch Range Request ): ĠGet Next Batch Range Response Ġ{ ĊĠĠĠ Ġvar Ġ( start , Ġend , Ġcount ) Ġ= Ġdecode Key Range ( request . back fill _ range ) ĊĊĠĠĠ Ġ// ĠIf Ġthis Ġisn 't Ġthe Ġfirst Ġbatch Ġrange , Ġstart Ġwhere Ġwe Ġlast Ġleft Ġoff . ĊĠĠĠ Ġif Ġ( request . previous _ end _ key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġstart Ġ= Ġdecode Segment ( request . previous _ end _ key ). first ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbatches Ġ= Ġmutable ListOf < GetNext Batch Range Response . Batch >() ĊĠĠĠ Ġfor Ġ( i Ġin Ġstart Ġuntil Ġmin Of ( start Ġ+ Ġ 1 , Ġend )) Ġ{ ĊĠĠĠĠĠ Ġbatches Ġ+= ĠGet Next Batch Range Response . Batch . Builder () ĊĠĠĠĠĠĠĠĠĠ Ġ. batch _ range ( encode Key Range ( i , Ġi Ġ+ Ġ 1 , Ġcount )) ĊĠĠĠĠĠĠĠĠĠ Ġ. matching _ record _ count ( 1 0 0 L ) ĊĠĠĠĠĠĠĠĠĠ Ġ. sc anned _ record _ count ( 1 0 0 L ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠGet Next Batch Range Response . Builder () ĊĠĠĠĠĠĠĠ Ġ. batches ( batches ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġrun Batch ( request : ĠRun Batch Request ): ĠRun Batch Response Ġ{ ĊĠĠĠ Ġval Ġ( start , Ġend , Ġcount ) Ġ= Ġdecode Key Range ( request . batch _ range ) ĊĠĠĠ Ġrequire ( end Ġ== Ġstart Ġ+ Ġ 1 ) ĊĊĠĠĠ Ġval Ġconfig Ġ= ĊĠĠĠĠĠĠĠ Ġparameters Operator . construct Back fill Config ( request . parameters , Ġrequest . dry _ run ) ĊĊĠĠĠ Ġvar Ġlast Evalu ated Key : ĠMap < String , ĠAttribute Value >? Ġ= Ġnull ĊĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠ Ġval Ġscan Request Ġ= ĠD ynamoDB Scan Expression (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġsegment Ġ= Ġstart ĊĠĠĠĠĠĠĠ Ġtotal Segments Ġ= Ġcount ĊĠĠĠĠĠĠĠ Ġlimit Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġif Ġ( last Evalu ated Key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġexclusive Start Key Ġ= Ġlast Evalu ated Key ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġd ynamo Db . scan Page ( back fill . item Type . java , Ġscan Request ) ĊĠĠĠĠĠ Ġback fill . run Batch ( result . results , Ġconfig ) ĊĠĠĠĠĠ Ġlast Evalu ated Key Ġ= Ġresult . last Evalu ated Key ĊĠĠĠ Ġ} Ġwhile Ġ( last Evalu ated Key Ġ!= Ġnull ) ĊĊĠĠĠ Ġreturn ĠRun Batch Response . Builder () ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠ Ġ} Ċ } Ċ