Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: net/disk_cache/backend_impl.cc

Issue 10148001: Disk Cache: Add more corruption tracking histograms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/disk_cache/addr.cc ('k') | net/disk_cache/entry_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/disk_cache/backend_impl.h" 5 #include "net/disk_cache/backend_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/file_path.h" 9 #include "base/file_path.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 if (!(user_flags_ & kNoRandom)) { 440 if (!(user_flags_ & kNoRandom)) {
441 // The unit test controls directly what to test. 441 // The unit test controls directly what to test.
442 new_eviction_ = (cache_type_ == net::DISK_CACHE); 442 new_eviction_ = (cache_type_ == net::DISK_CACHE);
443 } 443 }
444 444
445 if (!CheckIndex()) { 445 if (!CheckIndex()) {
446 ReportError(ERR_INIT_FAILED); 446 ReportError(ERR_INIT_FAILED);
447 return net::ERR_FAILED; 447 return net::ERR_FAILED;
448 } 448 }
449 449
450 if (create_files || !data_->header.num_entries)
451 ReportError(ERR_CACHE_CREATED);
452
450 if (!(user_flags_ & kNoRandom) && 453 if (!(user_flags_ & kNoRandom) &&
451 cache_type_ == net::DISK_CACHE && !InitExperiment(&data_->header)) 454 cache_type_ == net::DISK_CACHE && !InitExperiment(&data_->header))
452 return net::ERR_FAILED; 455 return net::ERR_FAILED;
453 456
454 // We don't care if the value overflows. The only thing we care about is that 457 // We don't care if the value overflows. The only thing we care about is that
455 // the id cannot be zero, because that value is used as "not dirty". 458 // the id cannot be zero, because that value is used as "not dirty".
456 // Increasing the value once per second gives us many years before we start 459 // Increasing the value once per second gives us many years before we start
457 // having collisions. 460 // having collisions.
458 data_->header.this_id++; 461 data_->header.this_id++;
459 if (!data_->header.this_id) 462 if (!data_->header.this_id)
460 data_->header.this_id++; 463 data_->header.this_id++;
461 464
462 if (data_->header.crash) { 465 if (data_->header.crash) {
463 ReportError(ERR_PREVIOUS_CRASH); 466 ReportError(ERR_PREVIOUS_CRASH);
464 } else { 467 } else {
465 ReportError(0); 468 ReportError(ERR_NO_ERROR);
466 data_->header.crash = 1; 469 data_->header.crash = 1;
467 } 470 }
468 471
469 if (!block_files_.Init(create_files)) 472 if (!block_files_.Init(create_files))
470 return net::ERR_FAILED; 473 return net::ERR_FAILED;
471 474
472 // We want to minimize the changes to cache for an AppCache. 475 // We want to minimize the changes to cache for an AppCache.
473 if (cache_type() == net::APP_CACHE) { 476 if (cache_type() == net::APP_CACHE) {
474 DCHECK(!new_eviction_); 477 DCHECK(!new_eviction_);
475 read_only_ = true; 478 read_only_ = true;
476 } 479 }
477 480
478 eviction_.Init(this); 481 eviction_.Init(this);
479 482
480 // stats_ and rankings_ may end up calling back to us so we better be enabled. 483 // stats_ and rankings_ may end up calling back to us so we better be enabled.
481 disabled_ = false; 484 disabled_ = false;
482 if (!stats_.Init(this, &data_->header.stats)) 485 if (!stats_.Init(this, &data_->header.stats))
483 return net::ERR_FAILED; 486 return net::ERR_FAILED;
484 487
485 disabled_ = !rankings_.Init(this, new_eviction_); 488 disabled_ = !rankings_.Init(this, new_eviction_);
486 489
490 if (!disabled_ && !(user_flags_ & kNoRandom) && base::RandInt(0, 99) < 2)
491 rankings_.SelfCheck(); // Ignore return value for now.
492
487 #if defined(STRESS_CACHE_EXTENDED_VALIDATION) 493 #if defined(STRESS_CACHE_EXTENDED_VALIDATION)
488 trace_object_->EnableTracing(false); 494 trace_object_->EnableTracing(false);
489 int sc = SelfCheck(); 495 int sc = SelfCheck();
490 if (sc < 0 && sc != ERR_NUM_ENTRIES_MISMATCH) 496 if (sc < 0 && sc != ERR_NUM_ENTRIES_MISMATCH)
491 NOTREACHED(); 497 NOTREACHED();
492 trace_object_->EnableTracing(true); 498 trace_object_->EnableTracing(true);
493 #endif 499 #endif
494 500
495 return disabled_ ? net::ERR_FAILED : net::OK; 501 return disabled_ ? net::ERR_FAILED : net::OK;
496 } 502 }
(...skipping 1044 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 if (it != open_entries_.end()) { 1547 if (it != open_entries_.end()) {
1542 // Easy job. This entry is already in memory. 1548 // Easy job. This entry is already in memory.
1543 EntryImpl* this_entry = it->second; 1549 EntryImpl* this_entry = it->second;
1544 this_entry->AddRef(); 1550 this_entry->AddRef();
1545 *entry = this_entry; 1551 *entry = this_entry;
1546 return 0; 1552 return 0;
1547 } 1553 }
1548 1554
1549 STRESS_DCHECK(block_files_.IsValid(address)); 1555 STRESS_DCHECK(block_files_.IsValid(address));
1550 1556
1551 if (!address.is_initialized() || address.is_separate_file() || 1557 if (!address.SanityCheckForEntry()) {
1552 address.file_type() != BLOCK_256) {
1553 LOG(WARNING) << "Wrong entry address."; 1558 LOG(WARNING) << "Wrong entry address.";
1554 STRESS_NOTREACHED(); 1559 STRESS_NOTREACHED();
1555 return ERR_INVALID_ADDRESS; 1560 return ERR_INVALID_ADDRESS;
1556 } 1561 }
1557 1562
1558 scoped_refptr<EntryImpl> cache_entry( 1563 scoped_refptr<EntryImpl> cache_entry(
1559 new EntryImpl(this, address, read_only_)); 1564 new EntryImpl(this, address, read_only_));
1560 IncreaseNumRefs(); 1565 IncreaseNumRefs();
1561 *entry = NULL; 1566 *entry = NULL;
1562 1567
(...skipping 606 matching lines...) Expand 10 before | Expand all | Expand 10 after
2169 if (total_memory > kMaxBuffersSize || total_memory <= 0) 2174 if (total_memory > kMaxBuffersSize || total_memory <= 0)
2170 total_memory = kMaxBuffersSize; 2175 total_memory = kMaxBuffersSize;
2171 2176
2172 done = true; 2177 done = true;
2173 } 2178 }
2174 2179
2175 return static_cast<int>(total_memory); 2180 return static_cast<int>(total_memory);
2176 } 2181 }
2177 2182
2178 } // namespace disk_cache 2183 } // namespace disk_cache
OLDNEW
« no previous file with comments | « net/disk_cache/addr.cc ('k') | net/disk_cache/entry_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698