@@ -32,15 +32,16 @@ func main() {
3232 // flags
3333 port := flag .String ("port" , defaultPort , defaultPortUsage )
3434 redirectURL := flag .String ("url" , defaultTarget , defaultTargetUsage )
35- yGen := flag .Uint64 ("ygen" , 0 , "Invalid young generation size." )
36- tGen := flag .Uint64 ("tgen" , 0 , "Invalid tenured generation size." )
35+ cmdEndpoint := flag .String ("endpoint" , "/" , "Custom endpoint to send GCI-specific commands. For example, '/gci'" )
36+ yGen := flag .Uint64 ("ygen" , 0 , "Young generation size, in bytes." )
37+ tGen := flag .Uint64 ("tgen" , 0 , "Tenured generation size, in bytes." )
3738 flag .Parse ()
3839
3940 if * yGen == 0 || * tGen == 0 {
4041 log .Fatalf ("Neither ygen nor tgen can be 0. ygen:%d tgen:%d" , * yGen , * tGen )
4142 }
4243
43- proxy := newProxy (* redirectURL , * yGen , * tGen )
44+ proxy := newProxy (* redirectURL , * cmdEndpoint , * yGen , * tGen )
4445 c := make (chan struct {}, 1 )
4546 router := httprouter .New ()
4647 router .HandlerFunc ("GET" , "/" , func (w http.ResponseWriter , r * http.Request ) {
@@ -72,6 +73,7 @@ type transport struct {
7273 isAvailable int32
7374 shed uint64
7475 target string
76+ cmdEndpoint string
7577 waiter pendingWaiter
7678 window sampleWindow
7779 stGen1 sheddingThreshold
@@ -139,7 +141,7 @@ func (t *transport) checkHeap() {
139141 arrived , finished := t .waiter .waitPending ()
140142 t .window .update (finished )
141143
142- req , err := http .NewRequest ("GET" , fmt .Sprintf ("%s/ " , t .target ), nil )
144+ req , err := http .NewRequest ("GET" , fmt .Sprintf ("%s%s " , t .target , t . cmdEndpoint ), nil )
143145 if err != nil {
144146 panic (fmt .Sprintf ("Err trying to build heap check request: %q\n " , err ))
145147 }
@@ -189,7 +191,7 @@ func shouldGC(pending, usedBytes, st uint64) bool {
189191}
190192
191193func (t * transport ) gc (gen generation ) {
192- req , err := http .NewRequest ("GET" , fmt .Sprintf ("%s/ " , t .target ), nil )
194+ req , err := http .NewRequest ("GET" , fmt .Sprintf ("%s%s " , t .target , t . cmdEndpoint ), nil )
193195 if err != nil {
194196 panic (fmt .Sprintf ("Err trying to build gc request: %q\n " , err ))
195197 }
@@ -222,19 +224,20 @@ func (p *proxy) handle(w http.ResponseWriter, r *http.Request) {
222224 p .proxy .ServeHTTP (w , r )
223225}
224226
225- func newProxy (target string , yGen , tGen uint64 ) * proxy {
227+ func newProxy (target , cmdEndpoint string , yGen , tGen uint64 ) * proxy {
226228 url , _ := url .Parse (target )
227229 p := httputil .NewSingleHostReverseProxy (url )
228- p .Transport = newTransport (target , yGen , tGen )
230+ p .Transport = newTransport (target , cmdEndpoint , yGen , tGen )
229231 return & proxy {target : url , proxy : p }
230232}
231233
232- func newTransport (target string , yGen , tGen uint64 ) * transport {
234+ func newTransport (target , cmdEndpoint string , yGen , tGen uint64 ) * transport {
233235 return & transport {
234- target : target ,
235- window : newSampleWindow (),
236- stGen1 : newSheddingThreshold (time .Now ().UnixNano (), yGen ),
237- stGen2 : newSheddingThreshold (time .Now ().UnixNano (), tGen ),
236+ target : target ,
237+ cmdEndpoint : cmdEndpoint ,
238+ window : newSampleWindow (),
239+ stGen1 : newSheddingThreshold (time .Now ().UnixNano (), yGen ),
240+ stGen2 : newSheddingThreshold (time .Now ().UnixNano (), tGen ),
238241 }
239242}
240243
0 commit comments