From ff37cc455c0248f327d887a3f7318ab993c4f015 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Thu, 20 Aug 2015 20:03:27 -0700 Subject: [PATCH] pkg/transport: remove home-grown limitedListener --- pkg/transport/limited_conn_listener.go | 55 -------------- pkg/transport/limited_conn_listener_test.go | 79 --------------------- 2 files changed, 134 deletions(-) delete mode 100644 pkg/transport/limited_conn_listener.go delete mode 100644 pkg/transport/limited_conn_listener_test.go diff --git a/pkg/transport/limited_conn_listener.go b/pkg/transport/limited_conn_listener.go deleted file mode 100644 index 0cbe88e22..000000000 --- a/pkg/transport/limited_conn_listener.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2015 CoreOS, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package transport - -import ( - "errors" - "net" - - "github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog" - "github.com/coreos/etcd/pkg/runtime" -) - -var plog = capnslog.NewPackageLogger("github.com/coreos/etcd/pkg", "transport") - -type LimitedConnListener struct { - net.Listener - RuntimeFDLimit uint64 -} - -func (l *LimitedConnListener) Accept() (net.Conn, error) { - conn, err := l.Listener.Accept() - if err != nil { - return nil, err - } - - n, err := runtime.FDUsage() - // Check whether fd number in use exceeds the set limit. - if err == nil && n >= l.RuntimeFDLimit { - conn.Close() - plog.Errorf("accept error: closing connection, exceed file descriptor usage limitation (fd limit=%d)", l.RuntimeFDLimit) - return nil, &acceptError{error: errors.New("exceed file descriptor usage limitation"), temporary: true} - } - return conn, nil -} - -type acceptError struct { - error - temporary bool -} - -func (e *acceptError) Timeout() bool { return false } - -func (e *acceptError) Temporary() bool { return e.temporary } diff --git a/pkg/transport/limited_conn_listener_test.go b/pkg/transport/limited_conn_listener_test.go deleted file mode 100644 index fd3fb05ef..000000000 --- a/pkg/transport/limited_conn_listener_test.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2015 CoreOS, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package transport - -import ( - "net" - "net/http" - "net/http/httptest" - "testing" - - "github.com/coreos/etcd/pkg/runtime" -) - -func TestLimitedConnListenerAccept(t *testing.T) { - if _, err := runtime.FDUsage(); err != nil { - t.Skip("skip test due to unsupported runtime.FDUsage") - } - - ln, err := net.Listen("tcp", ":0") - if err != nil { - t.Fatal(err) - } - fdNum, err := runtime.FDUsage() - if err != nil { - t.Fatal(err) - } - srv := &httptest.Server{ - Listener: &LimitedConnListener{ - Listener: ln, - RuntimeFDLimit: fdNum + 100, - }, - Config: &http.Server{}, - } - srv.Start() - defer srv.Close() - - resp, err := http.Get(srv.URL) - defer resp.Body.Close() - if err != nil { - t.Fatalf("Get error = %v, want nil", err) - } -} - -func TestLimitedConnListenerLimit(t *testing.T) { - if _, err := runtime.FDUsage(); err != nil { - t.Skip("skip test due to unsupported runtime.FDUsage") - } - - ln, err := net.Listen("tcp", ":0") - if err != nil { - t.Fatal(err) - } - srv := &httptest.Server{ - Listener: &LimitedConnListener{ - Listener: ln, - RuntimeFDLimit: 0, - }, - Config: &http.Server{}, - } - srv.Start() - defer srv.Close() - - _, err = http.Get(srv.URL) - if err == nil { - t.Fatalf("unexpected nil Get error") - } -}