handle lock failures from main Cache::open_write entry points below
| 776 | |
| 777 | // handle lock failures from main Cache::open_write entry points below |
| 778 | int |
| 779 | CacheVC::openWriteStartBegin(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */) |
| 780 | { |
| 781 | intptr_t err; |
| 782 | cancel_trigger(); |
| 783 | if (_action.cancelled) { |
| 784 | return free_CacheVC(this); |
| 785 | } |
| 786 | if (((err = stripe->open_write_lock(this, false, 1)) > 0)) { |
| 787 | ts::Metrics::Counter::increment(cache_rsb.status[op_type].failure); |
| 788 | ts::Metrics::Counter::increment(stripe->cache_vol->vol_rsb.status[op_type].failure); |
| 789 | free_CacheVC(this); |
| 790 | _action.continuation->handleEvent(CACHE_EVENT_OPEN_WRITE_FAILED, reinterpret_cast<void *>(-err)); |
| 791 | return EVENT_DONE; |
| 792 | } |
| 793 | if (err < 0) { |
| 794 | VC_SCHED_LOCK_RETRY(); |
| 795 | } |
| 796 | if (f.overwrite) { |
| 797 | SET_HANDLER(&CacheVC::openWriteOverwrite); |
| 798 | return openWriteOverwrite(EVENT_IMMEDIATE, nullptr); |
| 799 | } else { |
| 800 | // write by key |
| 801 | SET_HANDLER(&CacheVC::openWriteMain); |
| 802 | return callcont(CACHE_EVENT_OPEN_WRITE); |
| 803 | } |
| 804 | } |
nothing calls this directly
no test coverage detected