OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ | 5 #ifndef CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ |
6 #define CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ | 6 #define CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ |
7 | 7 |
8 #include <time.h> | 8 #include <time.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
(...skipping 28 matching lines...) Expand all Loading... | |
39 // that producers to this file do not need to understand json. | 39 // that producers to this file do not need to understand json. |
40 // | 40 // |
41 // Current external producers: | 41 // Current external producers: |
42 // + watchdog | 42 // + watchdog |
43 // | 43 // |
44 // | 44 // |
45 // The metadata file is a separate file containing a json dictionary. | 45 // The metadata file is a separate file containing a json dictionary. |
46 // | 46 // |
47 class SynchronizedMinidumpManager { | 47 class SynchronizedMinidumpManager { |
48 public: | 48 public: |
49 // Max number of dumps allowed in lockfile. | |
50 static const int kMaxLockfileDumps; | |
51 | |
52 // Length of a ratelimit period in seconds. | 49 // Length of a ratelimit period in seconds. |
53 static const int kRatelimitPeriodSeconds; | 50 static const int kRatelimitPeriodSeconds; |
54 | 51 |
55 // Number of dumps allowed per period. | 52 // Number of dumps allowed per period. |
56 static const int kRatelimitPeriodMaxDumps; | 53 static const int kRatelimitPeriodMaxDumps; |
57 | 54 |
58 virtual ~SynchronizedMinidumpManager(); | 55 virtual ~SynchronizedMinidumpManager(); |
59 | 56 |
60 // Returns whether this object's file locking method is nonblocking or not. | 57 // Returns whether this object's file locking method is nonblocking or not. |
61 bool non_blocking() { return non_blocking_; } | 58 bool non_blocking() { return non_blocking_; } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
93 // Remove the lockfile entry at |index| in the current in memory | 90 // Remove the lockfile entry at |index| in the current in memory |
94 // representation of the lockfile. If the index is invalid returns -1. | 91 // representation of the lockfile. If the index is invalid returns -1. |
95 // Otherwise returns 0. | 92 // Otherwise returns 0. |
96 int RemoveEntryFromLockFile(int index); | 93 int RemoveEntryFromLockFile(int index); |
97 | 94 |
98 // Get the number of un-uploaded dumps in the dump_path directory. | 95 // Get the number of un-uploaded dumps in the dump_path directory. |
99 // If delete_all_dumps is true, also delete all these files, this is used to | 96 // If delete_all_dumps is true, also delete all these files, this is used to |
100 // clean lingering dump files. | 97 // clean lingering dump files. |
101 int GetNumDumps(bool delete_all_dumps); | 98 int GetNumDumps(bool delete_all_dumps); |
102 | 99 |
100 // Increment the number of dumps in the current ratelimit period. | |
101 // Returns 0 on success, < 0 on error. | |
102 int IncrementRatelimitPeriodDumps(); | |
slan
2015/09/09 19:08:11
This name is confusing to me. Perhaps IncrementNum
bcf_google
2015/09/09 21:20:29
Done.
| |
103 | |
104 // Returns true when dumps uploaded in current rate limit period is less than | |
105 // |kRatelimitPeriodMaxDumps|. Resets rate limit period if period time has | |
106 // elapsed. | |
107 bool CanUploadDump(); | |
108 | |
103 // If true, the flock on the lockfile will be nonblocking. | 109 // If true, the flock on the lockfile will be nonblocking. |
104 bool non_blocking_; | 110 bool non_blocking_; |
105 | 111 |
106 // Cached path for the minidumps directory. | 112 // Cached path for the minidumps directory. |
107 const base::FilePath dump_path_; | 113 const base::FilePath dump_path_; |
108 | 114 |
109 private: | 115 private: |
110 // Acquire the lock file. Blocks if another process holds it, or if called | 116 // Acquire the lock file. Blocks if another process holds it, or if called |
111 // a second time by the same process. Returns the fd of the lockfile if | 117 // a second time by the same process. Returns the fd of the lockfile if |
112 // successful, or -1 if failed. | 118 // successful, or -1 if failed. |
113 int AcquireLockFile(); | 119 int AcquireLockFile(); |
114 | 120 |
115 // Parse the lockfile and metadata file, populating |dumps_| and |metadata_| | 121 // Parse the lockfile and metadata file, populating |dumps_| and |metadata_| |
116 // for modifier functions to use. Return -1 if an error occurred. Otherwise, | 122 // for modifier functions to use. Return -1 if an error occurred. Otherwise, |
117 // return 0. This must not be called unless |this| has acquired the lock. | 123 // return 0. This must not be called unless |this| has acquired the lock. |
118 int ParseFiles(); | 124 int ParseFiles(); |
119 | 125 |
120 // Write deserialized |dumps| to |lockfile_path_| and the deserialized | 126 // Write deserialized |dumps| to |lockfile_path_| and the deserialized |
121 // |metadata| to |metadata_path_|. | 127 // |metadata| to |metadata_path_|. |
122 int WriteFiles(const base::ListValue* dumps, const base::Value* metadata); | 128 int WriteFiles(const base::ListValue* dumps, const base::Value* metadata); |
123 | 129 |
124 // Creates an empty lock file and an initialized metadata file. | 130 // Creates an empty lock file and an initialized metadata file. |
125 int InitializeFiles(); | 131 int InitializeFiles(); |
126 | 132 |
127 // Release the lock file with the associated *fd*. | 133 // Release the lock file with the associated *fd*. |
128 void ReleaseLockFile(); | 134 void ReleaseLockFile(); |
129 | 135 |
130 // Returns true if |num_dumps| can be written to the lockfile. We can write | |
131 // the dumps if the number of dumps in the lockfile after |num_dumps| is added | |
132 // is less than or equal to |kMaxLockfileDumps| and the number of dumps in the | |
133 // current ratelimit period after |num_dumps| is added is less than or equal | |
134 // to |kRatelimitPeriodMaxDumps|. | |
135 bool CanWriteDumps(int num_dumps); | |
136 | |
137 const std::string lockfile_path_; | 136 const std::string lockfile_path_; |
138 const std::string metadata_path_; | 137 const std::string metadata_path_; |
139 int lockfile_fd_; | 138 int lockfile_fd_; |
140 scoped_ptr<base::Value> metadata_; | 139 scoped_ptr<base::Value> metadata_; |
141 scoped_ptr<base::ListValue> dumps_; | 140 scoped_ptr<base::ListValue> dumps_; |
142 | 141 |
143 DISALLOW_COPY_AND_ASSIGN(SynchronizedMinidumpManager); | 142 DISALLOW_COPY_AND_ASSIGN(SynchronizedMinidumpManager); |
144 }; | 143 }; |
145 | 144 |
146 } // namespace chromecast | 145 } // namespace chromecast |
147 | 146 |
148 #endif // CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ | 147 #endif // CHROMECAST_CRASH_LINUX_SYNCHRONIZED_MINIDUMP_MANAGER_H_ |
OLD | NEW |