code: long put(DecoratedKey key, ColumnFamily cf, SecondaryIndexManager.Updater indexer, OpOrder.Group opGroup)
      {
          AtomicBTreeColumns previous = rows.get(key);
  
          if (previous == null)
          {
              AtomicBTreeColumns empty = cf.cloneMeShallow(AtomicBTreeColumns.factory, false);
              final DecoratedKey cloneKey = allocator.clone(key, opGroup);
              // We'll add the columns later. This avoids wasting works if we get beaten in the putIfAbsent
              previous = rows.putIfAbsent(cloneKey, empty);
              if (previous == null)
              {
                  previous = empty;
                  // allocate the row overhead after the fact; this saves over allocating and having to free after, but
                  // means we can overshoot our declared limit.
                  int overhead = (int) (cfs.partitioner.getHeapSizeOf(key.getToken()) + ROW_OVERHEAD_HEAP_SIZE);
                  allocator.onHeap().allocate(overhead, opGroup);
              }
              else
              {
                  allocator.reclaimer().reclaimImmediately(cloneKey);
              }
          }
  
          final Pair<Long, Long> pair = previous.addAllWithSizeDelta(cf, allocator, opGroup, indexer);
          liveDataSize.addAndGet(pair.left);
          currentOperations.addAndGet(cf.getColumnCount() + (cf.isMarkedForDelete() ? 1 : 0) + cf.deletionInfo().rangeCount());
          return pair.right;
      }
docs: Should only be called by ColumnFamilyStore.apply via Keyspace.apply, which supplies the appropriate
  OpOrdering.
  
  replayPosition should only be null if this is a secondary index, in which case it is *expected* to be null