code: Object runOp(Op op) {
          LOG.debug("Run: {}", op);
          recursive.set(Boolean.TRUE);
          try {
              if (op.type == Op.Type.PUT || op.type == Op.Type.ALLOC)
                  return execOp(op, null);
  
              final long id = op.line;
              CacheLine line = getLine(id);
              if (line == null) {
                  Object res = handleOpNoLine(op.type, op.line, op.getExtra());
                  if (res != DIDNT_HANDLE)
                      return res;
                  else
                      line = createNewCacheLine(op);
              }
  
              final Object res;
              synchronized (line) {
                  res = execOp(op, line);
              }
  
              receiveShortCircuit();
  
              if (res instanceof Op)
                  return runOp((Op) res);
              return res;
          } finally {
              recursive.remove();
          }
      }
docs: visible for testing