MCPcopy Create free account
hub / github.com/apache/trafficserver / openWriteCloseDataDone

Method openWriteCloseDataDone

src/iocore/cache/CacheWrite.cc:393–442  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

391}
392
393int
394CacheVC::openWriteCloseDataDone(int event, Event *e)
395{
396 int ret = 0;
397 cancel_trigger();
398
399 if (event == AIO_EVENT_DONE) {
400 set_io_not_in_progress();
401 } else if (is_io_in_progress()) {
402 return EVENT_CONT;
403 }
404 if (!io.ok()) {
405 return openWriteCloseDir(event, e);
406 }
407 {
408 CACHE_TRY_LOCK(lock, stripe->mutex, this_ethread());
409 if (!lock.is_locked()) {
410 VC_LOCK_RETRY_EVENT();
411 }
412 if (!fragment) {
413 ink_assert(key == earliest_key);
414 earliest_dir = dir;
415 } else {
416 // Store the offset only if there is a table.
417 // Currently there is no alt (and thence no table) for non-HTTP.
418 if (alternate.valid()) {
419 alternate.push_frag_offset(write_pos);
420 }
421 }
422 fragment++;
423 write_pos += write_len;
424 dir_insert(&key, stripe, &dir);
425 blocks = iobufferblock_skip(blocks.get(), &offset, &length, write_len);
426 next_CacheKey(&key, &key);
427 if (length) {
428 write_len = length;
429 if (write_len > MAX_FRAG_SIZE) {
430 write_len = MAX_FRAG_SIZE;
431 }
432 if ((ret = do_write_call()) == EVENT_RETURN) {
433 goto Lcallreturn;
434 }
435 return ret;
436 }
437 f.data_done = 1;
438 return openWriteCloseHead(event, e); // must be called under vol lock from here
439 }
440Lcallreturn:
441 return handleEvent(AIO_EVENT_DONE, nullptr);
442}
443
444int
445CacheVC::openWriteClose(int event, Event *e)

Callers

nothing calls this directly

Calls 7

this_ethreadFunction · 0.85
dir_insertFunction · 0.85
next_CacheKeyFunction · 0.85
push_frag_offsetMethod · 0.80
okMethod · 0.45
validMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected