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

Side by Side Diff: components/metrics/persisted_logs.h

Issue 290103005: Remove the provisional store and just store the staged log when writing to (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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
« no previous file with comments | « components/metrics/metrics_service.cc ('k') | components/metrics/persisted_logs.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 #ifndef COMPONENTS_METRICS_PERSISTED_LOGS_H_ 5 #ifndef COMPONENTS_METRICS_PERSISTED_LOGS_H_
6 #define COMPONENTS_METRICS_PERSISTED_LOGS_H_ 6 #define COMPONENTS_METRICS_PERSISTED_LOGS_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 19 matching lines...) Expand all
30 LOG_STRING_CORRUPTION, // Failed to recover log string using GetAsString(). 30 LOG_STRING_CORRUPTION, // Failed to recover log string using GetAsString().
31 CHECKSUM_CORRUPTION, // Failed to verify checksum. 31 CHECKSUM_CORRUPTION, // Failed to verify checksum.
32 CHECKSUM_STRING_CORRUPTION, // Failed to recover checksum string using 32 CHECKSUM_STRING_CORRUPTION, // Failed to recover checksum string using
33 // GetAsString(). 33 // GetAsString().
34 DECODE_FAIL, // Failed to decode log. 34 DECODE_FAIL, // Failed to decode log.
35 DEPRECATED_XML_PROTO_MISMATCH, // The XML and protobuf logs have 35 DEPRECATED_XML_PROTO_MISMATCH, // The XML and protobuf logs have
36 // inconsistent data. 36 // inconsistent data.
37 END_RECALL_STATUS // Number of bins to use to create the histogram. 37 END_RECALL_STATUS // Number of bins to use to create the histogram.
38 }; 38 };
39 39
40 enum StoreType {
41 NORMAL_STORE, // A standard store operation.
42 PROVISIONAL_STORE, // A store operation that can be easily reverted later.
43 };
44
45 // Constructs a PersistedLogs that stores data in |local_state| under the 40 // Constructs a PersistedLogs that stores data in |local_state| under the
46 // preference |pref_name| and also reads from legacy pref |old_pref_name|. 41 // preference |pref_name| and also reads from legacy pref |old_pref_name|.
47 // Calling code is responsible for ensuring that the lifetime of |local_state| 42 // Calling code is responsible for ensuring that the lifetime of |local_state|
48 // is longer than the lifetime of PersistedLogs. 43 // is longer than the lifetime of PersistedLogs.
49 // 44 //
50 // When saving logs to disk, stores either the first |min_log_count| logs, or 45 // When saving logs to disk, stores either the first |min_log_count| logs, or
51 // at least |min_log_bytes| bytes of logs, whichever is greater. 46 // at least |min_log_bytes| bytes of logs, whichever is greater.
52 // 47 //
53 // If the optional |max_log_size| parameter is non-zero, all logs larger than 48 // If the optional |max_log_size| parameter is non-zero, all logs larger than
54 // that limit will be skipped when writing to disk. 49 // that limit will be skipped when writing to disk.
(...skipping 14 matching lines...) Expand all
69 // Adds a log to the list. 64 // Adds a log to the list.
70 void StoreLog(const std::string& log_data); 65 void StoreLog(const std::string& log_data);
71 66
72 // Stages the most recent log. The staged_log will remain the same even if 67 // Stages the most recent log. The staged_log will remain the same even if
73 // additional logs are added. 68 // additional logs are added.
74 void StageLog(); 69 void StageLog();
75 70
76 // Remove the staged log. 71 // Remove the staged log.
77 void DiscardStagedLog(); 72 void DiscardStagedLog();
78 73
79 // Saves the staged log, then clears staged_log().
80 // If |store_type| is PROVISIONAL_STORE, it can be dropped from storage with
81 // a later call to DiscardLastProvisionalStore (if it hasn't already been
82 // staged again).
83 // This is intended to be used when logs are being saved while an upload is in
84 // progress, in case the upload later succeeds.
85 // This can only be called if has_staged_log() is true.
86 void StoreStagedLogAsUnsent(StoreType store_type);
87
88 // Discards the last log stored with StoreStagedLogAsUnsent with |store_type|
89 // set to PROVISIONAL_STORE, as long as it hasn't already been re-staged. If
90 // the log is no longer present, this is a no-op.
91 void DiscardLastProvisionalStore();
92
93 // True if a log has been staged. 74 // True if a log has been staged.
94 bool has_staged_log() const { 75 bool has_staged_log() const { return staged_log_index_ != -1; };
95 return !staged_log_.compressed_log_data.empty();
96 }
97 76
98 // Returns the element in the front of the list. 77 // Returns the element in the front of the list.
99 const std::string& staged_log() const { 78 const std::string& staged_log() const {
100 DCHECK(has_staged_log()); 79 DCHECK(has_staged_log());
101 return staged_log_.compressed_log_data; 80 return list_[staged_log_index_].compressed_log_data;
102 } 81 }
103 82
104 // Returns the element in the front of the list. 83 // Returns the element in the front of the list.
105 const std::string& staged_log_hash() const { 84 const std::string& staged_log_hash() const {
106 DCHECK(has_staged_log()); 85 DCHECK(has_staged_log());
107 return staged_log_.hash; 86 return list_[staged_log_index_].hash;
108 } 87 }
109 88
110 // The number of elements currently stored. 89 // The number of elements currently stored.
111 size_t size() const { return list_.size(); } 90 size_t size() const { return list_.size(); }
112 91
113 // True if there are no stored logs. 92 // True if there are no stored logs.
114 bool empty() const { return list_.empty(); } 93 bool empty() const { return list_.empty(); }
115 94
116 private: 95 private:
117 // Writes the list to the ListValue. 96 // Writes the list to the ListValue.
(...skipping 24 matching lines...) Expand all
142 const size_t min_log_count_; 121 const size_t min_log_count_;
143 const size_t min_log_bytes_; 122 const size_t min_log_bytes_;
144 123
145 // Logs greater than this size will not be written to disk. 124 // Logs greater than this size will not be written to disk.
146 const size_t max_log_size_; 125 const size_t max_log_size_;
147 126
148 struct LogHashPair { 127 struct LogHashPair {
149 // Initializes the members based on uncompressed |log_data|. 128 // Initializes the members based on uncompressed |log_data|.
150 void Init(const std::string& log_data); 129 void Init(const std::string& log_data);
151 130
152 // Clears the struct members.
153 void Clear();
154
155 // Swap both log and hash from another LogHashPair.
156 void Swap(LogHashPair* input);
157
158 // Compressed log data - a serialized protobuf that's been gzipped. 131 // Compressed log data - a serialized protobuf that's been gzipped.
159 std::string compressed_log_data; 132 std::string compressed_log_data;
160 133
161 // The SHA1 hash of log, stored to catch errors from memory corruption. 134 // The SHA1 hash of log, stored to catch errors from memory corruption.
162 std::string hash; 135 std::string hash;
163 }; 136 };
164 // A list of all of the stored logs, stored with SHA1 hashes to check for 137 // A list of all of the stored logs, stored with SHA1 hashes to check for
165 // corruption while they are stored in memory. 138 // corruption while they are stored in memory.
166 std::vector<LogHashPair> list_; 139 std::vector<LogHashPair> list_;
167 140
168 // The log staged for upload. 141 // The index and type of the log staged for upload. If nothing has been
169 LogHashPair staged_log_; 142 // staged, the index will be -1.
170 143 int staged_log_index_;
171 // The index and type of the last provisional store. If nothing has been
172 // provisionally stored, or the last provisional store has already been
173 // re-staged, the index will be -1;
174 // This is necessary because during an upload there are two logs (staged
175 // and current) and a client might store them in either order, so it's
176 // not necessarily the case that the provisional store is the last store.
177 int last_provisional_store_index_;
178 144
179 DISALLOW_COPY_AND_ASSIGN(PersistedLogs); 145 DISALLOW_COPY_AND_ASSIGN(PersistedLogs);
180 }; 146 };
181 147
182 } // namespace metrics 148 } // namespace metrics
183 149
184 #endif // COMPONENTS_METRICS_PERSISTED_LOGS_H_ 150 #endif // COMPONENTS_METRICS_PERSISTED_LOGS_H_
OLDNEW
« no previous file with comments | « components/metrics/metrics_service.cc ('k') | components/metrics/persisted_logs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698