code: func (b *BigtableIdx) Update(point schema.MetricPoint, partition int32) (idx.Archive, int32, bool) {
  	pre := time.Now()
  
  	archive, oldPartition, inMemory := b.MemoryIndex.Update(point, partition)
  
  	if !b.cfg.UpdateBigtableIdx {
  		statUpdateDuration.Value(time.Since(pre))
  		return archive, oldPartition, inMemory
  	}
  
  	if inMemory {
  		// bigtable uses partition ID in the key prefix, so an "update" that changes the partition for
  		// an existing metricDef will just create a new row in the table and won't remove the old row.
  		// So we need to explicitly delete the old entry.
  		if oldPartition != partition {
  			go func() {
  				err := b.deleteRow(FormatRowKey(archive.Id, oldPartition))
  				if err != nil {
  					log.Errorf("bigtable-idx: Failed to delete row %s: %s", archive.Id, err)
  				}
  			}()
  		}
  		// check if we need to save to bigtable.
  		now := uint32(time.Now().Unix())
  		if archive.LastSave < (now - b.cfg.updateInterval32) {
  			archive = b.updateBigtable(now, inMemory, archive, partition)
  		}
  	}
  
  	statUpdateDuration.Value(time.Since(pre))
  	return archive, oldPartition, inMemory
  }
docs: // Update updates an existing archive, if found.
  // It returns whether it was found, and - if so - the (updated) existing archive and its old partition