code: func (fs *FileStore) DeleteClient(clientID string) error {
  	fs.Lock()
  	if _, err := fs.fm.lockFile(fs.clientsFile); err != nil {
  		fs.Unlock()
  		return err
  	}
  	fs.delClientRec = spb.ClientDelete{ID: clientID}
  	_, size, err := writeRecord(fs.clientsFile.handle, nil, delClient, &fs.delClientRec, fs.delClientRec.Size(), fs.crcTable)
  	// Even if there is an error, proceed. If we compact the file,
  	// this may resolve the issue.
  	delete(fs.clients, clientID)
  	fs.cliDeleteRecs++
  	fs.cliFileSize += int64(size)
  	// Check if this triggers a need for compaction
  	if fs.shouldCompactClientFile() {
  		// close the file now
  		// If we can't close the file, it does not make sense
  		// to proceed with compaction.
  		if lerr := fs.fm.closeLockedFile(fs.clientsFile); lerr != nil {
  			fs.Unlock()
  			return lerr
  		}
  		// compact (this uses a temporary file)
  		// Override writeRecord error with the result of compaction.
  		// If compaction works, the original error is no longer an issue
  		// since the file has been replaced.
  		err = fs.compactClientFile(fs.clientsFile.name)
  	} else {
  		fs.fm.unlockFile(fs.clientsFile)
  	}
  	fs.Unlock()
  	return err
  }
docs: // DeleteClient implements the Store interface