comparison src/core/ngx_file.c @ 5969:3281de8142f5

Core: reverted prefix-based temp files (a9138c35120d). The use_temp_path http cache feature is now implemented using a separate temp hierarchy in cache directory. Prefix-based temp files are no longer needed.
author Roman Arutyunyan <arut@nginx.com>
date Mon, 02 Feb 2015 21:28:09 +0300
parents 863d9de1e62b
children e37ec0a33901
comparison
equal deleted inserted replaced
5968:99639bfdfa2a 5969:3281de8142f5
109 ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain) 109 ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain)
110 { 110 {
111 ngx_int_t rc; 111 ngx_int_t rc;
112 112
113 if (tf->file.fd == NGX_INVALID_FILE) { 113 if (tf->file.fd == NGX_INVALID_FILE) {
114 rc = ngx_create_temp_file(&tf->file, tf->prefix ? NULL : tf->path, 114 rc = ngx_create_temp_file(&tf->file, tf->path, tf->pool,
115 tf->pool, tf->persistent, tf->clean, 115 tf->persistent, tf->clean, tf->access);
116 tf->access);
117 116
118 if (rc != NGX_OK) { 117 if (rc != NGX_OK) {
119 return rc; 118 return rc;
120 } 119 }
121 120
131 130
132 ngx_int_t 131 ngx_int_t
133 ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool, 132 ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,
134 ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access) 133 ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access)
135 { 134 {
136 u_char *p;
137 uint32_t n; 135 uint32_t n;
138 ngx_err_t err; 136 ngx_err_t err;
139 ngx_str_t prefix;
140 ngx_pool_cleanup_t *cln; 137 ngx_pool_cleanup_t *cln;
141 ngx_pool_cleanup_file_t *clnf; 138 ngx_pool_cleanup_file_t *clnf;
142 139
143 prefix = path ? path->name : file->name; 140 file->name.len = path->name.len + 1 + path->len + 10;
144 file->name.len = prefix.len + 1 + (path ? path->len : 0) + 10;
145 141
146 file->name.data = ngx_pnalloc(pool, file->name.len + 1); 142 file->name.data = ngx_pnalloc(pool, file->name.len + 1);
147 if (file->name.data == NULL) { 143 if (file->name.data == NULL) {
148 return NGX_ERROR; 144 return NGX_ERROR;
149 } 145 }
152 for (i = 0; i < file->name.len; i++) { 148 for (i = 0; i < file->name.len; i++) {
153 file->name.data[i] = 'X'; 149 file->name.data[i] = 'X';
154 } 150 }
155 #endif 151 #endif
156 152
157 p = ngx_cpymem(file->name.data, prefix.data, prefix.len); 153 ngx_memcpy(file->name.data, path->name.data, path->name.len);
158
159 if (path) {
160 p += 1 + path->len;
161
162 } else {
163 *p++ = '.';
164 }
165 154
166 n = (uint32_t) ngx_next_temp_number(0); 155 n = (uint32_t) ngx_next_temp_number(0);
167 156
168 cln = ngx_pool_cleanup_add(pool, sizeof(ngx_pool_cleanup_file_t)); 157 cln = ngx_pool_cleanup_add(pool, sizeof(ngx_pool_cleanup_file_t));
169 if (cln == NULL) { 158 if (cln == NULL) {
170 return NGX_ERROR; 159 return NGX_ERROR;
171 } 160 }
172 161
173 for ( ;; ) { 162 for ( ;; ) {
174 (void) ngx_sprintf(p, "%010uD%Z", n); 163 (void) ngx_sprintf(file->name.data + path->name.len + 1 + path->len,
175 164 "%010uD%Z", n);
176 if (path) { 165
177 ngx_create_hashed_filename(path, file->name.data, file->name.len); 166 ngx_create_hashed_filename(path, file->name.data, file->name.len);
178 }
179 167
180 ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0, 168 ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
181 "hashed path: %s", file->name.data); 169 "hashed path: %s", file->name.data);
182 170
183 file->fd = ngx_open_tempfile(file->name.data, persistent, access); 171 file->fd = ngx_open_tempfile(file->name.data, persistent, access);
202 if (err == NGX_EEXIST) { 190 if (err == NGX_EEXIST) {
203 n = (uint32_t) ngx_next_temp_number(1); 191 n = (uint32_t) ngx_next_temp_number(1);
204 continue; 192 continue;
205 } 193 }
206 194
207 if ((path == NULL) || (path->level[0] == 0) || (err != NGX_ENOPATH)) { 195 if ((path->level[0] == 0) || (err != NGX_ENOPATH)) {
208 ngx_log_error(NGX_LOG_CRIT, file->log, err, 196 ngx_log_error(NGX_LOG_CRIT, file->log, err,
209 ngx_open_tempfile_n " \"%s\" failed", 197 ngx_open_tempfile_n " \"%s\" failed",
210 file->name.data); 198 file->name.data);
211 return NGX_ERROR; 199 return NGX_ERROR;
212 } 200 }