From 63bbbbbf2b092cdf17c224fdbc28d2c9d0511166 Mon Sep 17 00:00:00 2001 From: David Hill Date: Fri, 7 Oct 2016 12:47:39 -0400 Subject: [PATCH] Remove unused files The files were moved to the peer pkg --- mrunoncemap.go | 130 ------------------------------------- mrunoncemap_test.go | 153 -------------------------------------------- 2 files changed, 283 deletions(-) delete mode 100644 mrunoncemap.go delete mode 100644 mrunoncemap_test.go diff --git a/mrunoncemap.go b/mrunoncemap.go deleted file mode 100644 index c9b55c522f..0000000000 --- a/mrunoncemap.go +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright (c) 2015 The btcsuite developers -// Copyright (c) 2015-2016 The Decred developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package main - -import ( - "bytes" - "container/list" - "fmt" - "sync" -) - -// mruNonceMap provides a concurrency safe map that is limited to a maximum -// number of items with eviction for the oldest entry when the limit is -// exceeded. -type mruNonceMap struct { - mtx sync.Mutex - nonceMap map[uint64]*list.Element // nearly O(1) lookups - nonceList *list.List // O(1) insert, update, delete - limit uint -} - -// String returns the map as a human-readable string. -// -// This function is safe for concurrent access. -func (m *mruNonceMap) String() string { - m.mtx.Lock() - defer m.mtx.Unlock() - - lastEntryNum := len(m.nonceMap) - 1 - curEntry := 0 - buf := bytes.NewBufferString("[") - for nonce := range m.nonceMap { - buf.WriteString(fmt.Sprintf("%d", nonce)) - if curEntry < lastEntryNum { - buf.WriteString(", ") - } - curEntry++ - } - buf.WriteString("]") - - return fmt.Sprintf("<%d>%s", m.limit, buf.String()) -} - -// Exists returns whether or not the passed nonce is in the map. -// -// This function is safe for concurrent access. -func (m *mruNonceMap) Exists(nonce uint64) bool { - m.mtx.Lock() - defer m.mtx.Unlock() - - if _, exists := m.nonceMap[nonce]; exists { - return true - } - return false -} - -// Add adds the passed nonce to the map and handles eviction of the oldest item -// if adding the new item would exceed the max limit. Adding an existing item -// makes it the most recently used item. -// -// This function is safe for concurrent access. -func (m *mruNonceMap) Add(nonce uint64) { - m.mtx.Lock() - defer m.mtx.Unlock() - - // When the limit is zero, nothing can be added to the map, so just - // return. - if m.limit == 0 { - return - } - - // When the entry already exists move it to the front of the list - // thereby marking it most recently used. - if node, exists := m.nonceMap[nonce]; exists { - m.nonceList.MoveToFront(node) - return - } - - // Evict the least recently used entry (back of the list) if the the new - // entry would exceed the size limit for the map. Also reuse the list - // node so a new one doesn't have to be allocated. - if uint(len(m.nonceMap))+1 > m.limit { - node := m.nonceList.Back() - lru := node.Value.(uint64) - - // Evict least recently used item. - delete(m.nonceMap, lru) - - // Reuse the list node of the item that was just evicted for the - // new item. - node.Value = nonce - m.nonceList.MoveToFront(node) - m.nonceMap[nonce] = node - return - } - - // The limit hasn't been reached yet, so just add the new item. - node := m.nonceList.PushFront(nonce) - m.nonceMap[nonce] = node - return -} - -// Delete deletes the passed nonce from the map (if it exists). -// -// This function is safe for concurrent access. -func (m *mruNonceMap) Delete(nonce uint64) { - m.mtx.Lock() - defer m.mtx.Unlock() - - if node, exists := m.nonceMap[nonce]; exists { - m.nonceList.Remove(node) - delete(m.nonceMap, nonce) - } -} - -// newMruNonceMap returns a new nonce map that is limited to the number of -// entries specified by limit. When the number of entries exceeds the limit, -// the oldest (least recently used) entry will be removed to make room for the -// new entry. -func newMruNonceMap(limit uint) *mruNonceMap { - m := mruNonceMap{ - nonceMap: make(map[uint64]*list.Element), - nonceList: list.New(), - limit: limit, - } - return &m -} diff --git a/mrunoncemap_test.go b/mrunoncemap_test.go deleted file mode 100644 index 432cec7fc7..0000000000 --- a/mrunoncemap_test.go +++ /dev/null @@ -1,153 +0,0 @@ -// Copyright (c) 2015 The btcsuite developers -// Copyright (c) 2015-2016 The Decred developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package main - -import ( - "fmt" - "testing" -) - -// TestMruNonceMap ensures the mruNonceMap behaves as expected including -// limiting, eviction of least-recently used entries, specific entry removal, -// and existence tests. -func TestMruNonceMap(t *testing.T) { - // Create a bunch of fake nonces to use in testing the mru nonce code. - numNonces := 10 - nonces := make([]uint64, 0, numNonces) - for i := 0; i < numNonces; i++ { - nonces = append(nonces, uint64(i)) - } - - tests := []struct { - name string - limit int - }{ - {name: "limit 0", limit: 0}, - {name: "limit 1", limit: 1}, - {name: "limit 5", limit: 5}, - {name: "limit 7", limit: 7}, - {name: "limit one less than available", limit: numNonces - 1}, - {name: "limit all available", limit: numNonces}, - } - -testLoop: - for i, test := range tests { - // Create a new mru nonce map limited by the specified test - // limit and add all of the test nonces. This will cause - // evicition since there are more test nonces than the limits. - mruNonceMap := newMruNonceMap(uint(test.limit)) - for j := 0; j < numNonces; j++ { - mruNonceMap.Add(nonces[j]) - } - - // Ensure the limited number of most recent entries in the list - // exist. - for j := numNonces - test.limit; j < numNonces; j++ { - if !mruNonceMap.Exists(nonces[j]) { - t.Errorf("Exists #%d (%s) entry %d does not "+ - "exist", i, test.name, nonces[j]) - continue testLoop - } - } - - // Ensure the entries before the limited number of most recent - // entries in the list do not exist. - for j := 0; j < numNonces-test.limit; j++ { - if mruNonceMap.Exists(nonces[j]) { - t.Errorf("Exists #%d (%s) entry %d exists", i, - test.name, nonces[j]) - continue testLoop - } - } - - // Readd the entry that should currently be the least-recently - // used entry so it becomes the most-recently used entry, then - // force an eviction by adding an entry that doesn't exist and - // ensure the evicted entry is the new least-recently used - // entry. - // - // This check needs at least 2 entries. - if test.limit > 1 { - origLruIndex := numNonces - test.limit - mruNonceMap.Add(nonces[origLruIndex]) - - mruNonceMap.Add(uint64(numNonces) + 1) - - // Ensure the original lru entry still exists since it - // was updated and should've have become the mru entry. - if !mruNonceMap.Exists(nonces[origLruIndex]) { - t.Errorf("MRU #%d (%s) entry %d does not exist", - i, test.name, nonces[origLruIndex]) - continue testLoop - } - - // Ensure the entry that should've become the new lru - // entry was evicted. - newLruIndex := origLruIndex + 1 - if mruNonceMap.Exists(nonces[newLruIndex]) { - t.Errorf("MRU #%d (%s) entry %d exists", i, - test.name, nonces[newLruIndex]) - continue testLoop - } - } - - // Delete all of the entries in the list, including those that - // don't exist in the map, and ensure they no longer exist. - for j := 0; j < numNonces; j++ { - mruNonceMap.Delete(nonces[j]) - if mruNonceMap.Exists(nonces[j]) { - t.Errorf("Delete #%d (%s) entry %d exists", i, - test.name, nonces[j]) - continue testLoop - } - } - } -} - -// TestMruNonceMapStringer tests the stringized output for the mruNonceMap type. -func TestMruNonceMapStringer(t *testing.T) { - // Create a couple of fake nonces to use in testing the mru nonce - // stringer code. - nonce1 := uint64(10) - nonce2 := uint64(20) - - // Create new mru nonce map and add the nonces. - mruNonceMap := newMruNonceMap(uint(2)) - mruNonceMap.Add(nonce1) - mruNonceMap.Add(nonce2) - - // Ensure the stringer gives the expected result. Since map iteration - // is not ordered, either entry could be first, so account for both - // cases. - wantStr1 := fmt.Sprintf("<%d>[%d, %d]", 2, nonce1, nonce2) - wantStr2 := fmt.Sprintf("<%d>[%d, %d]", 2, nonce2, nonce1) - gotStr := mruNonceMap.String() - if gotStr != wantStr1 && gotStr != wantStr2 { - t.Fatalf("unexpected string representation - got %q, want %q "+ - "or %q", gotStr, wantStr1, wantStr2) - } -} - -// BenchmarkMruNonceList performs basic benchmarks on the most recently used -// nonce handling. -func BenchmarkMruNonceList(b *testing.B) { - // Create a bunch of fake nonces to use in benchmarking the mru nonce - // code. - b.StopTimer() - numNonces := 100000 - nonces := make([]uint64, 0, numNonces) - for i := 0; i < numNonces; i++ { - nonces = append(nonces, uint64(i)) - } - b.StartTimer() - - // Benchmark the add plus evicition code. - limit := 20000 - mruNonceMap := newMruNonceMap(uint(limit)) - for i := 0; i < b.N; i++ { - mruNonceMap.Add(nonces[i%numNonces]) - } -}